Правила экранирования атома в Прологе

Мне нужно экспортировать в файл программу Prolog, выраженную с использованием произвольного представления термина в Java. Идея состоит в том, что интерпретатор Пролога должен иметь возможность впоследствии обращаться к сгенерированному файлу. Мой вопрос касается правильного способа записи в файл Java Strings, представляющих атомные термины.

Например, если строка имеет пробел посередине, она должна быть заключена в одинарные кавычки в файле:

hello world становится "hello world"

И экспортер должен учитывать символы, которые следует экранировать:

' становится ' \ ''

Может ли кто-нибудь указать мне место, где указаны эти правила? И: Могу ли я предположить, что эти правила соблюдаются основными разработчиками Prolog? (Я имею в виду, что программа на Прологе, созданная в соответствии с этими правилами, будет правильно проанализирована большинством интерпретаторов Пролога?).


person Sergio    schedule 22.03.2013    source источник


Ответы (2)


Точное место для этого - стандарт ISO / IEC 13211-1: 1995, quoted_token (* 6.4.2 *). См. этот ответ, как получить его за 30 долларов США.

Точный синтаксис довольно сложен из-за множества дополнительных функций, таких как строки продолжения и т.п. Если вы пишете только атомы, которые должен быть прочитан Prolog, все будет немного проще. Также в этой ситуации вы всегда можете цитировать, что снова упрощает написание.

Некоторые вещи, о которых следует знать:

В атоме в кавычках могут использоваться только простые пробелы. Все остальные пробелы необходимо экранировать, например \t, \n (abrftnv). Многие системы допускают и другую компоновку, но они отличаются друг от друга очень мельчайшими деталями.

Необходимо избегать обратной косой черты и кавычек.

Символы за пределами печатаемого диапазона ASCII зависят от PCS, поддерживаемого системой. В соответствующей системе сопроводительная документация должна определять, как классифицируются дополнительные символы (расширенные символы). Качество документации варьируется в широком диапазоне.

В любом случае протестируйте свой интерфейс также с GNU-Prolog начиная с версии 1.4.1. На сегодняшний день не известно никаких различий между GNU 1.4.1+ и стандартом в том, что касается синтаксиса.

Вот более 240 тестовых примеров, связанных с синтаксисом. Пожалуйста, сообщайте о любых недосмотрах!

person false    schedule 22.03.2013

Практический совет: если вы выпустите writeq со своим Прологом, с данными, о которых вам нужно знать, при необходимости вы получите цитаты.

person CapelliC    schedule 23.03.2013
comment
спасибо за подсказку, знаете ли вы, поддерживается ли writeq большинством интерпретаторов Prolog? - person Sergio; 23.03.2013
comment
да, это практичный способ написать сложный термин, который можно прочитать. И это часть стандарта ISO. - person CapelliC; 23.03.2013