Модула-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".
Число =Целое | Действительное.
Целое = Цифра { Цифра } | ВосьмеричнаяЦифра
       { ВосьмеричнаяЦифра } ("B" | "C")|
        Цифра { ШестнадцатеричнаяЦифра } "H".
Действительное = Цифра { Цифра }
        "." { Цифра } [ Порядок ].
Порядок ="E" [ "+" | "-" ] Цифра { Цифра }.
ШестнадцатеричнаяЦифра =
        Цифра | "A" | "B" | "C" | "D" | "E" | "F".
Цифра = ВосьмеричнаяЦифра | "8" | "9".
ВосьмеричнаяЦифра =
        "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7".
Цепочка = "'" { литера } "'" .
КвалИдент = Идентификатор { "." Идентификатор }.
ОписаниеКонстанты = Идентификатор { "=" КонстВыражение }.
КонстВыражение = Выражение.
ОписаниеТипа = Идентификатор "=" Тип.
Тип = ПростойТип | ТипМассив | ТипЗапись | ТипМножество | ТипУказатель
        | ТипПроцедура.
ПростойТип = КвалИдент | Перечисление | ТипДиапазон.
Перечисление = "(" СписИдент ")".
СписИдент = Идентификатор { "," Идентификатор}.
ТипДиапазон = [Идентификатор] "[" КонстВыражение ".." КонстВыражение "]".
ТипМассив = ARRAY ПростойТип {"," ПростойТип } OF Тип.
ТипЗапись = RECORD ПослСписковКомпонент END.
ПослСписковКомпонент = СписокКомпонент { ";"  СписокКомпонент }.
СписокКомпонент = [ СписИдент ":" Тип | CASE [ Идентификатор ] ":"
         КвалИдент OF Вариант { "|" Вариант } [ ELSE ПослСписковКомпонент ] END].
Вариант = [ СписокМетокВарианта  ":"  ПослСписковКомпонент].
СписокМетокВарианта = МеткиВарианта { "," МеткиВарианта }.
МеткиВарианта = КонстВыражение [".."КонстВыражение].
ТипМножество = SET OF ПростойТип.
ТипУказатель = POINTER TO Тип.
ТипПроцедура = PROCEDURE [СписокФормТипов].
СписокФормТипов = "(" [[VAR] ФормТип {"," [VAR] ФормТип}] ")" [":" КвалИдент ].
ОписаниеПеременной = СписИдент ":" Тип.
Обозначение = КвалИдент { "." Идентификатор | "[" СписВыражений "]" | "^" }.
СписВыражений = Выражение  { "," Выражение}.
Выражение = ПростоеВыражение [ Отношение ПростоеВыражение ].
Отношение = "=" | "#" | "<" | ">" | "<=" | ">=" | IN.
ПростоеВыражение = ["+"|"-"] Слагаемое { ОперацияТипаУмножения Множитель }.
ОперацияТипаСлоожения = "+" | "-" | OR.
Слагаемое = Множитель { ОперацияТипаУмножения Множитель }.
ОперацияТипаУмножения = "*" | "/" | DIV | MOD | AND.
Множитель = Число | Цепочка | Множество | Обозначение [ ФактическиеПараметры] |
      "(" Выражение ")" | NOT Множитель.
Множество = [ КвалИдент] "{" [ Элемент { "," Элемент }]"}".
Элемент = Выражение [".." Выражение].
ФактическиеПараметры = "(" [ СписВыражений ]")".
Оператор = [ Присваивание | ВызовПроцедуры | УсловныйОператор | ОператорВыбора |
      ЦиклПока | ЦиклДо | БезусловныйЦикл | ЦиклСШагом | ОператорПрисоединения |
      EXIT | RETURN [ Выражение ]].
Присваивание = Обозначение ":=" Выражение.
ВызовПроцедуры = Обозначение [ ФактическиеПараметры ].
ПослОператоров = Оператор {":" Оператор }.
УсловныйОператор = IF Выражение THEN ПослОператоров
      {ELSIF Выражение THEN ПослОператоров} [ELSE ПослОператоров] END.
ОператорВыбора = CASE Выражение OF Альтернатива
      {"|"Альтернатива } [ELSE ПослОператоров ] END.
Альтернатива = [ СписокМетокВарианта ":" ПослОператоров].
ЦиклПока = WHILE Выражение DO ПослОператоров END.
ЦиклДо = REPEAT ПослОператоров END.
ЦиклСШагом = FOR Идентификатор ":=" Выражение TO Выражение
      [BY КонстВыражение] DO ПослОператоров END.
БезусловныйЦикл = LOOP ПослОператоров END.
ОператорПрисоединения = WITH Обозначение DO ПослОператоров END.
ОписаниеПроцедуры = ЗаголовокПроцедуры ";" Блок Идентификатор.
ЗаголовокПроцедуры = PROCEDURE Идентификатор [ ФормальныеПараметры ].
Блок = {Описание} [BEGIN ПослОператоров ] END.
Описание = CONST {ОписаниеКонстанты ":"} | TYPE {ОписаниеТипа";"} |
      VAR {ОписаниеПеременной ";"} | ОписаниеПроцедуры ";" |
      ОписаниеМодуля ";".
ФормальныеПараметры = "(" [ФПСекция {";"ФПСекция}]")"[":"КвалИдент].
ФПСекция = [VAR] СписИдент ":"ФормТип.
ФормТип = [ARRAY OF] КвалИдент.
ОписаниеМодуля = MODULE Идентификатор [Приоритет] ";" {Импорт} [Экспорт]
      Блок Идентификатор.
Приоритет = "[" КонстВыражение "]".
Экспорт = EXPORT [QUALIFIED] СписИдент ";".
Импорт = [FROM Идентификатор] IMPORT СписИдент ";".
МодульОпределенный =DEFINITION MODULE Идентификатор [Приоритет] ";"{Импорт}
      {Определение} END Идентификатор ".".
Определение = CONST {ОписаниеКонстанты ";"} |
      TYPE {Идентификатор ["=" Тип]";"} |
      VAR {ОписаниеПеременной ";"} | ЗаголовокПроцедуры ";".
ПрограмныйМодуль = MODULE Идентификатор [Приоритет]";"{Импорт} Блок
      Идентификатор ".".
ЕдиницаКомпиляции = МодульОпределенный | [IMPLEMENTATION] ПрограмныйМодуль.