Оберон-2
Описание подготовлено С. Свердловым

Буква = "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".

Идент = Буква {Буква | Цифра}.

Число          = Целое | Вещественное.
Целое          = Цифра {Цифра} | Цифра {ШестнЦифра} "H".
Вещественное   = Цифра {Цифра} "." {Цифра} [Порядок].
Порядок     = ("E" | "D") ["+" | "-"] Цифра {Цифра}.
ШестнЦифра     = Цифра | "A" | "B" | "C" | "D" | "E" | "F".
Цифра       = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".

Символ = Цифра {ШестнЦифра} "X".
Строка = '"' {символ} '"' | "'" {символ} "'".

Модуль
=
 MODULE Идент ";" [СписокИмпорта] ПослОбъявл
[BEGIN ПослОператоров] END Идент ".".

СписокИмпорта
=
IMPORT [Идент ":="] Идент {"," [Идент ":="] Идент} ";".

ПослОбъявл
=
{ CONST {ОбъявлКонст ";" }
| TYPE {ОбъявлТипа ";" }
| VAR {ОбъявлПерем ";" }}
{ОбъявлПроц ";" | ОпережающееОбъявл ";"}.

ОбъявлКонст
=
ИдентОпр "=" КонстВыраж.

ОбъявлТипа
=
ИдентОпр "=" Тип.

ОбъявлПерем
=
СписокИдент ":" Тип.

ОбъявлПроц
=
PROCEDURE [Приемник] ИдентОпр [ФормальныеПарам] ";"
ПослОбъявл [BEGIN ПослОператоров] END Идент.

ОпережающееОбъявл
=
PROCEDURE "^" [Приемник] ИдентОпр [ФормальныеПарам].

ФормальныеПарам
=
"(" [СекцияФП {";" СекцияФП}] ")" [":" УточнИдент].

СекцияФП
=
[VAR] Идент {"," Идент} ":" Тип.

Приемник
=
"(" [VAR] Идент ":" Идент ")".

Тип
=
УточнИдент
| ARRAY [КонстВыраж {"," КонстВыраж}] OF Тип
| RECORD ["("УточнИдент")"] СписокПолей {";" СписокПолей}
END
| POINTER TO Тип
| PROCEDURE [ФормальныеПарам].

СписокПолей
=
[СписокИдент ":" Тип].

ПослОператоров
=
Оператор {";" Оператор}.

Оператор
=
[  Обозначение ":=" Выраж
| Обозначение ["(" [СписокВыраж] ")"]
| IF Выраж THEN ПослОператоров {ELSIF Выраж THEN
       ПослОператоров} [ELSE ПослОператоров] END
| CASE Выраж OF Вариант {"|" Вариант} [ELSE
ПослОператоров] END
| WHILE Выраж DO ПослОператоров END
| REPEAT ПослОператоров UNTIL Выраж
| FOR Идент ":=" Выраж TO Выраж [BY КонстВыраж] DO
        ПослОператоров END
| LOOP ПослОператоров END
| WITH Охрана DO ПослОператоров {"|" Охрана DO
ПослОператоров} [ELSE ПослОператоров] END
| EXIT
| RETURN [Выраж]
].

Вариант
=
[МеткиВарианта {"," МеткиВарианта} ":" ПослОператоров].

МеткиВарианта
=
КонстВыраж [".." КонстВыраж].

Охрана
=
УточнИдент ":" УточнИдент.

КонстВыраж
=
Выраж.

Выраж
=
ПростоеВыраж [Отношение ПростоеВыраж].

ПростоеВыраж
=
["+" | "-"] Слагаемое {ОперСлож Слагаемое}.

Слагаемое
=
Множитель {ОперУмн Множитель}.

Множитель
=
Обозначение ["(" [СписокВыраж] ")"] | Число | Символ | Строка
| NIL | Множество | "(" Выраж ")" | "~" Множитель.

Множество
=
"{" [Элемент {"," Элемент}] "}".

Элемент
=
Выраж [".." Выраж].

Отношение
=
"=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.

ОперСлож
=
"+" | "-" | OR.

ОперУмн
=
"*" | "/" | DIV | MOD | "&".

Обозначение
=
УточнИдент {"." Идент | "[" СписокВыраж "]" | "^"
| "(" УточнИдент ")"}.

СписокВыраж
=
Выраж {"," Выраж}.

СписокИдент
=
ИдентОпр {"," ИдентОпр}.

УточнИдент
=
[Идент "."] Идент.

ИдентОпр
=
Идент [ "*" | "-" ].