ГОСТ Р 59791—2021
А.2.2.6 Строки в кавычках
Строки в кавычках и выделенные имена требуют применения другого алгоритма лексикализации, чем осталь
ные части текста CLIF, поскольку круглые скобки и пробелы не разбивают поток текста в кавычках на лексические
токены.
Если текст CLIF заключен в текст или документ, опирающийся на соглашения об экранировании символов,
подразумевают, что описанные здесь соглашения о строках CL в кавычках могут быть применены к тексту, опи
санному или обозначенному на основании используемых соглашений, которые подлежат применению в первую
очередь. Таким образом, например, содержимое элемента XML
<cl- text>'a\'b<c&apos</cl-text> является строкой в кавычках с синтаксисом CLIF ‘а\Ъ<с’,которая
обозначает пятисимвольную текстовую строку а’Ь<с. Тем не менее, простой текст CLIF 'a\'b<c&apos
представлял бы собой довольно длинное имя.
quotedstring = stringquote, { white | open | close | char | nonascii | namequote |
innerstringquote | innerbackslash }, stringquote ;
enclosedname = namequote, { white | open | close | char | nonascii | stringquote |
innernamequote}, namequote
A.2.2.7 Зарезервированные токены
reservedelement
состоит из лексических токенов, которые используют для обозначения синтаксической
структуры выражений CL. Их не допускается использовать в качестве имен в тексте CLIF.
reservedelement =| ‘and’ | ‘or’ | ‘iff’ | ‘if | ‘forall’ | ‘exists’ |
‘not’ | ‘cl:text’ | ‘cl:ttr | ‘ckimports’ | ‘chrestricf | ‘chindiscourse’ |
‘cl:outdiscourse’ | ‘chcomment’ | ‘chprefx’ ;
A.2.2.8 Последовательность символов имени
namecharsequence
— это лексический токен, который не начинается с каких-либо специальных симво
лов. Обратите внимание, что namecharsequences может не содержать пробелов или круглых скобок, а также мо
жет не начинаться с кавычек, хотя и может их содержать. Цифры и маркеры последовательностей не являются
namecharsequence.
namecharsequence = ( char, { char | stringquote | namequote | backslash }) - (
reservedelement | numeral | seqmark );
A.2.2.9 Лексические категории
Задача лексического анализатора — разобрать поток символов на последовательные, непересекающиеся
строки lexbreak и nonlexbreak и передать выявленные лексические токены в виде потока токенов на следующий
этап синтаксической обработки. Лексические лексемы делят на восемь взаимно непересекающихся категорий:
открывающие и закрывающие круглые скобки, числа, строки в кавычках (которые начинаются с и заканчиваются на
’” ), маркеры последовательности (которые начинаются свыделенные имена (которые начинаются с и окан
чиваются наа также namesequence и зарезервированные элементы.
lexbreak = open | close | white , { white };
nonlexbreak = numeral | quotedstring | seqmark | reservedelement | namecharsequence |
enclosedname ;
lexicaltoken = open | close | nonlexbreak ;
charstream = { white }, { lexicaltoken, lexbreak};
A .2.3 Синтаксис выражений
A.2.3.1 Последовательность терминов
Термы и атомарные высказывания используют понятие последовательности терминов, представляющее
вектор аргументов к функции или отношению. Маркеры последовательности используют для обозначения подпо
следовательности последовательности терминов; термины обозначают отдельные элементы.
27