Белое поле
начало и конец текста, пробел и конец строки. Знаки пробела и конца строки могут иметь разный смысл в зависимости от ситуации. Знак табуляции в непосредственном виде запрещён.
Знаки препинания А
значки :;.,?!~
если справа от любого из этих значков находится пробел, конец строки или конец текста, то они являются отдельными значками.
Это правило не действует в закавыченных словах.
Знаки препинания Б
Значки + - *, слева и справа от которых находится белое поле.
Незначащий конец строки
\<буква-с-кодом-10> - синтаксически незначимый разрыв строки (вставляется как особый знак препинания «разрыв строки»).
Не может находиться внутри строк и закавыченных слов.
Строковые литералы
Строковые литералы предназначены для наглядного представления текстовой информации, т.е. последовательности значков (unicode или GBK). Бывают однострочные и многострочные:
Код: Выделить всё
«однострочный строковый литерал»
«однострочный «с вложенностью» строковый литерал»
«|многострочный
|строковый литерал»
«|многострочный «с вложенным однострочным»
|строковый литерал»
В строках нужно закавычивать с помощью обратной косой черты значки |«»\, не считая случая вложенных строк, когда парные «» не закавычиваются. Также можно вставлять значки \uNNNN. (завершаются точкой), в т.ч. с кодами меньше 20, включая "\u0.". Все не указанные здесь сочетания с \, включая \«пробел», \«конец строки», \" - запрещены. В некоторых средах значок с кодом 0 имеет особый смысл конца текстовых данных. Для таких случаев для представления результатов разбора нужно разработать специальный способ представления строки, устойчивый к наличию значков с кодом 0.
Простые слова
Слова - это примерно то же, что идентификаторы в языках программирования.
Код: Выделить всё
Непрерывная последовательность букв кириллицы, латиницы и греческого, цифр и следующих значков:
:;._-+/
При этом, значки :;. в конце слова не включаются в состав слова; «.» в начале слова не входит в состав слова. - и + в конце слова запрещены.
Закавыченное слово - это когда нам понадобилось запихнуть в слово то, что в него почему-то не поместилось. Слово ограничивается значками ` и '. Оно может состоять из любых значков Unicode, но они кодируются особым образом:
- пробел обозначается как _
- подчёркивание _ обозначается как \_
- конец строки в Linux, LF обозначается как \n
- CR обозначается как \r
- знак табуляции обозначается как \t
- обратная косая \ обозначается как \s (см. https://docs.microsoft.com/ru-ru/cpp/c- ... ew=vs-2017 - вроде такого нет в языке Си, но удвоение обратной косой не очень-то удобно).
- ` и ' изображаются как \` и \' соответственно
- неупомянутые выше значки ASCII с кодом 0..0x1F изобраюжаются как «\uN.».
- прочие значки ASCII изображаются как есть
- знаки кириллицы и греческого, кроме диакритических знаков, изображаются как есть
- значки «»☼♥†☭¿° изображаются как есть (может быть, появятся ещё подобные значки)
- значки юникода, кроме ASCII, кириллицы, латиницы и греческого, изображаются как «\uN.»
- {...} - нетипизированный узел графа
- =слово - метка. Следующий считанный элемент помечается этой меткой. Действует в рамках одного документа.
- ^слово - ссылка на метку, определённую выше по тексту - должно совпадать побуквенно.
- после ~ может идти белое поле, конец текста или ~
- - или + в конце простого слова запрещены
- если простое слово заканчивается не на букву или цифру, за ним не может идти открывающая скобка или кавычка любого вида