Нотация данных

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2864
Зарегистрирован: 07.10.18 14:01

Нотация данных

Сообщение БудДен » 04.01.20 15:05

Нотация, похожая на json.

Белое поле
начало и конец текста, пробел и конец строки. Знаки пробела и конца строки могут иметь разный смысл в зависимости от ситуации. Знак табуляции в непосредственном виде запрещён.

Знаки препинания А
значки :;.,?!~
если справа от любого из этих значков находится пробел, конец строки или конец текста, то они являются отдельными значками.
Это правило не действует в закавыченных словах.

Знаки препинания Б
Значки + - *, слева и справа от которых находится белое поле.

Незначащий конец строки
\<буква-с-кодом-10> - синтаксически незначимый разрыв строки (вставляется как особый знак препинания «разрыв строки»).
Не может находиться внутри строк и закавыченных слов.

Строковые литералы
Строковые литералы предназначены для наглядного представления текстовой информации, т.е. последовательности значков (unicode или GBK). Бывают однострочные и многострочные:

Код: Выделить всё

«однострочный строковый литерал»
«однострочный «с вложенностью» строковый литерал»
«|многострочный 
  |строковый литерал»
  
«|многострочный «с вложенным однострочным»
                  |строковый литерал»
Однострочные строки можно вкладывать друг в друга и в многострочные - тогда завершение строки определяется по балансу кавычек. Ограничение на вложенность нужно для IDE.

В строках нужно закавычивать с помощью обратной косой черты значки |«»\, не считая случая вложенных строк, когда парные «» не закавычиваются. Также можно вставлять значки \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.»
Например, `вот_это_-_слово'
  • {...} - нетипизированный узел графа
  • =слово - метка. Следующий считанный элемент помечается этой меткой. Действует в рамках одного документа.
  • ^слово - ссылка на метку, определённую выше по тексту - должно совпадать побуквенно.
Ограничения
  • после ~ может идти белое поле, конец текста или ~
  • - или + в конце простого слова запрещены
  • если простое слово заканчивается не на букву или цифру, за ним не может идти открывающая скобка или кавычка любого вида

Ответить