1. Конец строки
Грамматическое описание конца строки:
КонецСтроки = (\u0A)|(\u0D \u0A)
Конец строки может быть либо символов перевода строки либо сочетанием символов возврата каретки и перевода строки (\n или \r\n в обозначении языков с С-подобным синтаксисом).
2. Комментарии
омментарии могут быть однострочными и многострочными.
Грамматическое описание однострочного комментария:
ОднострочныйКомментарий = "№" {Юникод!КонецСтроки}
Перед началом однострочного комментария ставится символ «№» послечего идёт любая последовательность символов до символов конца строки.
Грамматическое описание многострочного комментария:
Многострочный комментарий = "!" {Юникод!"!"} "!"
Многострочный комментарий заключен в символы восклицательного знака внутри которого могут быть любые символы за исключением восклицательного знака.
Комментарий можно поставить в любое место, где можно поставить пробельный символ.
Возможно в будущем будут еще комментарии в С-стиле, те «//» для однострочного комментария и «/» «/» для многострочного).
3. Пробелы
Грамматическое описание пробельных символов:
ПробельныйСимвол = \u20 | \u09 | Комментарий
Пробел = ПробельныйСимвол{ПробельныйСимвол}
Пробел состоит из одного или более пробельных символов. Пробельным символом является символ пробела или символ горизонтальной табуляции.
В начале строки Пробел выполняет также дополнительную функцию определения к какому блоку принадлежит строка. Один символ горизонтальной табуляции является табуляцией длиной в четыре пробела, комментарий — пробельный символ длиной в ноль пробелов.
4. Ключевые слова
Ключевые слова используются в последующих главах.
КлючевоеСлово = "целое8" | "целое16" | "целое32" ... ( и т.д.)
5. Идентификаторы
Грамматическое описание идентификатора:
Буква = а-я | a-z | _
Цифра = 0-9
Идентификатор = (Буква{Буква | Цифра})!КлючевоеСлово
Идентификатор — это набор букв и цифр неограниченной длины, начинающийся с буквы. Набор букв и цифр не должен совпадать с ключевыми словами.
Возможно будет добавлено условие, что одном идентификаторе нельзя одновременно использовать русские и английские символы.
6. Литералы
6.1 Целые числа
Грамматическое описание:
Цифра = 0-9
Знак = + | -
ЦелоеЧисло = [Знак] Цифра{Цифра}
Вначале целого числа может стоять знак «+» или «-«. Далее идет набор цифр от 0 до 9.
6.2 Цифра в шестнадцатеричном формате
Грамматическое описание:
ШестнадцатиричнаяЦифра = 0-9 | А | Б | В | Г | Д | Е
ШестнадцатиричноеЧисло = "0ш" ШестнадцатиричнаяЦифра{ШестнадцатиричнаяЦифра}
Шестнадцатиричное число начинается с символов 0ш а затем идут одна или несколько шестнадцатиричных цифр: от нуля до девяти и далее A=10, Б=11, В=12, Г=13, Д=14, Е=15. Буквы могут быть как заглавные, так и маленькие.
Возможно будет рассмотрен вариант чисел с буквами A-F, а также двоичные и восьмеричные числа. Также рассматривается вариант, представления числа без знака.
6.2 Числа с плавающей точкой
Грамматическое описание:
Цифра = 0-9
Точка = \u2E
Знак = + | -
ЦелоеЧисло = [Знак] Цифра{Цифра} Точка Цифра{Цифра}
Вначале числа с плавающей точкой может стоять знак «+» или «-«. Далее идет набор цифр от 0 до 9, обозначающий целую часть числа, затем символ «.», затем цифры от 0 до 9, обозначающие дробную часть числа.
В программе будет точка, при печати на экран печатается запятая.
В будущем будут добавлены константы плюс бесконечность, минус бесконечность, не число и возможно другие. Также рассматривается экспоненциальное представление для чисел с плавающей точкой формата: 3.35э4.
6.3 Булевы значения
Грамматическое описание:
БулевоЗначение = "да" | "нет"
Булево значение может принимать одно из двух значений «да» или «нет», соответствующие булевым значениям «правда» и «ложь» соответственно.
6.4 Строковые литералы
Грамматическое описание:
ДвойныеКавычки = \u22
СимволИсключения = \u5C
СтрочныйСимвол = Юникод!ДвойныеКавычки!СимволИсключения
Строка = ДвойныеКавычки {СтрочныйСимвол | ИсключающиеСимволы} ДвойныеКавычки
Двойные кавычки используются для обозначения строкового литерала. Внутри могут стоять любые символы кроме символа двойной кавычки и символа исключения. Символ исключения используется для создания исключающих символов, описанных в следующем пункте.
6.5 Исключающие символы для строковых литералов
Грамматическое описание:
СимволИсключения = \u5C
СимволВозвратаКаретки = СимволИсключения к
СимволНовойСтроки = СимволИсключения н
СимволГоризонтальнойТабуляции = СимволИсключения т
СимволДвойныхКавычек = СимволИсключения ДвойныеКавычки
СимволОбратногоСлеша = СимволИсключения СимволИсключения
ИсключающиеСимволы = СимволНовойСтроки | СимволГоризонтальнойТабуляции | СимволДвойныхКавычек | СимволОбратногоСлеша
В строке можно записать сивол новой строки или сивол табуляции, напрямую написав их внутри строки или добавив сочетание сиволов «\н» или «\т» соответственно. Если необходимо добавить двойные кавычки внутри строки, необходимо добавить в строку сочетание «»». Для добавления обратного слеша, необходимо просто его удвоить: «\».
Также можно добавить юникод-символы, записав их шестнадцатеричные коды с помощью исключающего символа «\ш». Сначала пишется ключевое буквосочетание «\ш», затем пишутся шестнадцатиричный код символа. Можно написать сразу несколько кодов, для этого их надо писать через запятую. По окончании записи юникод-символов ставится пробел, либо любой другой символ, не использующийся в написании шестнадцатиричного символа. Если в конце шестнадцатеричных символов ставится пробел, то он съедается.
Пример:
"Маленькая греческая буква альфа \ш3Б1"
"Маленькие греческие буквы альфа и бетта \ш3Б1,3Б2 22"
Конечное преобразование этих строк будет таким:
"Маленькая греческая буква альфа α"
"Маленькие греческие буквы альфа и бетта αβ 22"
Обратите внимание, что в конце второй строки перед символами «22» два пробела. Первый из них обозначает конец исключающего символа «\ш» и как бы «съедается». Второй пробел остаётся.
6.7 Разделители
Грамматическое описание:
ОткрывающиесяСкобки = \u28
ЗакрывающиесяСкобки = \u29
Запятая = \u2C
6.8 Операторы
Следующие токены являются операторами:
!"№;%:?*() ., -_=+\/*
Плюс = \u2B
Минус = \u2D
Умножить = \u2A
Разделить = \u2F
Присвоение = \u3D
Точка = \u2E
Двоеточие= \u3A
Равно = "р"
Больше = "б"
Меньше = "м"
БольшеИлиРавно = "бир"
МеньшеИлиРавно = "мир"
Рассматривается вариант «больше», «меньше» и «равно», чем «б», «м» и «р». А вот «бир» и «мир» можно останется.
Эти операторы будут упомянуты в следующих главах.
7. Входные элементы и токены
Здесь будет представлено общее синтаксическое описание всего модуля.