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. СВОДКА СИНТАКСИСА
КОРНЕВАЯ СТРАНИЦА
ОГЛАВЛЕНИЕ
СПИСОК ПОНЯТИЙ ЯЗЫКА (ИНДЕКС)