Синтаксические правила языка

1.

 буква = большая_буква | маленькая_буква

 большая_буква = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"

 маленькая_буква = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"

 цифра = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

 буквы_и_цифры = [ буквы_и_цифры [ "_" ] ] буква_или_цифра

 буква_или_цифра = буква | цифра

2.1.1.

 переменная = большая_буква [ [ "_" ] буквы_и_цифры ] | "_" [ буквы_и_цифры ]

2.1.2.

 символ = простой_символ | символ_в_апострофах

 простой_символ = маленькая_буква [ [ "_" ] буквы_и_цифры ]

 символ_в_апострофах = "'" { графема } "'"

2.1.3.

 числовой_литерал = расширенное_число [ порядок ] | цифры "#" расширенное_число "#" [ порядок ] | "`" графема

 расширенное_число = буквы_и_цифры [ "." буквы_и_цифры ]

 цифры = [ цифры [ "_" ] ] цифра

 порядок = буква_e [ "+" | "-" ] цифры

 буква_e = "E" | "e"

2.1.4.

 сегмент_строки = '"' { графема | "\" код } '"'

 код = "b" | "t" | "n" | "v" | "f" | "r" | числовой_литерал

3.

 терм = простой_терм | составной_терм | вызов_функции_в_предложении

 функтор = символ | метапеременная

 метапеременная = переменная

3.1.

 простой_терм = константа | параметр

 константа = символ_в_апострофах | [ "-" ] числовой_литерал | строковый_литерал | "#" | метапеременная

 строковый_литерал = [ строковый_литерал ] сегмент_строки

 параметр = переменная | атрибут

3.2.

 составной_терм = структура | список | недоопределённое_множество

3.2.1.

 структура = функтор "(" термы_и_выражения ")"

 термы_и_выражения = [ термы_и_выражения "," ] терм_или_выражение

 терм_или_выражение = терм | выражение

3.2.2.

 список = "[" [ термы_и_выражения [ "|" хвост ] ] "]"

 хвост = параметр | вызов_функции_в_предложении | выражение

3.2.3.

 элементы_множества = [ элементы_множества "," ] элемент_множества

 элемент_множества = имя_элемента [ ":" терм_или_выражение ] | атрибут

 имя_элемента = символ | числовой_литерал

 недоопределённое_множество = [ простой_терм ] "{" элементы_и_хвост_множества "}"

 элементы_и_хвост_множества = [ элементы_множества ] [ "|" хвост ]

4.

 программа = { определение_класса | определение_проекта }

4.1.

 определение_класса = class заголовок_класса ":" атрибуты "[" предложения "]"

 заголовок_класса = имя_класса [ specializing имя_класса ]

 имя_класса = символ_в_апострофах

4.1.1.

 атрибуты = { определение_атрибута ";" }

 определение_атрибута = [ описатель_порта ":" ] атрибут [ "=" инициализатор ]

 описатель_порта = suspending | protecting

 атрибут = простой_символ

4.1.2.

 инициализатор = терм | конструктор

4.1.3.

 конструктор = конструктор_мира | конструктор_резидента

 конструктор_мира = простой_конструктор | конструктор_процесса

 простой_конструктор = "(" имя_класса { "," определение_атрибута } ")"

 конструктор_процесса = "(" простой_конструктор ")"

 конструктор_резидента = [ параметр_или_конструктор ] "??" простой_атом

 параметр_или_конструктор = целевой_параметр | конструктор_мира

 целевой_параметр = параметр

4.2.

 определение_проекта = project ":" конструктор_процесса

4.3.

 пакет = [ заголовок_пакета ] команды_импорта программа

 заголовок_пакета = package имя_пакета ":"

 имя_пакета = строковый_литерал

 команды_импорта = { команда_импорта }

 команда_импорта = import импортируемое_имя from имя_пакета ";"

 импортируемое_имя = имя_класса [ as имя_класса ]

6.

 предложение = атом [ ":-" конъюнкция ] "."

 конъюнкция = [ конъюнкция "," ] подцель

 предложения = { предложение }

6.1.

 атом = простой_атом | бинарное_отношение | объявление_функции

6.1.1.

 простой_атом = функтор [ "(" [ термы_и_выражения [ "*" ] ] ")" ] | недоопределённое_множество | метапеременная

6.1.2.

 бинарное_отношение = терм_или_выражение оператор_отношения терм_или_выражение

 оператор_отношения = "==" | ":=" | "<" | ">" | "<>" | "<=" | ">="

6.1.3.

 объявление_функции = простой_атом "=" терм_или_выражение

6.2.

 подцель = простая_подцель | бинарное_отношение | "[" [ термы_и_выражения ] "]" | "!"

 простая_подцель = [ [ целевой_параметр ] инфикс_подцели ] простой_атом

 инфикс_подцели = "?" | "<<" | "<-"

6.2.1.

 вызов_функции_в_предложении = [ целевой_параметр ] "?" простой_атом | целевой_параметр "[" термы_и_выражения "]"

6.2.2.

 выражение = [ выражение аддитивный_оператор ] слагаемое | выражение аддитивный_оператор терм

 слагаемое = [ слагаемое мультипликативный_оператор ] множитель | слагаемое мультипликативный_оператор терм

 множитель = [ "-" ] "(" выражение ")"

 аддитивный_оператор = "+" | "-"

 мультипликативный_оператор = "*" | "/"


ДОПОЛНИТЕЛЬНЫЕ УСЛОВИЯ
ПЕРЕКРЁСТНЫЕ ССЫЛКИ СИНТАКСИСА


ПРИЛОЖЕНИЕ 1. СВОДКА СИНТАКСИСА
КОРНЕВАЯ СТРАНИЦА
ОГЛАВЛЕНИЕ
СПИСОК ПОНЯТИЙ ЯЗЫКА (ИНДЕКС)