Паскаль
Описание подготовлено С. Командировой

Программа = ЗаголовокПрограммы ";"  Блок ".".
ЗаголовокПрограммы = PROGRAM Имя "(" ИмяФайла { ","ИмяФайла }")" ";".
ИмяФайла = Имя.
Имя = Буква { БукваИлиЦифра }.
Буква = "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".
БукваИлиЦифра =  Буква | Цифра.
Цифра = "1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9".
Блок = [ РазделМеток ] [ РазделКонстант ] [ РазделТипов ] РазделПеременных
       [ РазделПроцедурИФункций ] РазделОператоров ";".
РазделМеток = [ LABEL Метка { "," Метка } ";" ].
Метка = ЦелоеБезЗнака.
РазделКонстант = [ CONST ОпределениеКонстанты { "," ОпределениеКонстанты }].
ОпределениеКонстанты = Имя "=" Константа.
Константа = ЧислоБезЗнака | Знак ЧислоБезЗнака | ИмяКонстанты |
            Знак ИмяКонстанты | Строка.
ЧислоБезЗнака = ЦелоеБезЗнака | ВещественноеБезЗнака.
ЦелоеБезЗнака = Цифра { Цифра }.
ВещественноеБезЗнака = ЦелоеБезЗнака "." Цифра { Цифра } | ЦелоеБезЗнака "."
                       Цифра { Цифра } "E" Порядок | ЦелоеБезЗнака "E"
                       Порядок.
Порядок = ЦелоеБезЗнака | Знак ЦелоеБезЗнака.
Знак = "+" | "-".
ИмяКонстанты = Имя.
Строка = "'"символ { символ } "'".
РазделТипов = [ TYPE ОпределениеТипа { ";" ОпределениеТипа } ";" ].
ОпределениеТипа = Имя "=" Тип.
Тип = ПростойТип | СоставнойТип | СсылочныйТип.
ПростойТип = СкалярныйТип | ОграниченныйТип | ИмяТипа.
СкалярныйТип = "(" Имя { "," Имя } ")".
ОграниченныйТип = Константа ".." Константа.
ИмяТипа = Имя.
СоставнойТип = [ PACKED ] НеупакованныйСоставнойТип.
НеупакованныйСоставнойТип = РегулярныйТип | КомбинированныйТип |
                            МножественныйТип | ФайловыйТип.
РегулярныйТип = ARRAY "[" ТипИндекса { "," ТипИндекса } "]"  OF
                ТипКомпоненты.
ТипИндекса = ПростойТип.
ТипКомпоненты = Тип.
КомбинированныйТип = RECORD СписокПолей END.
СписокПолей = ФиксированнаяЧасть | ФиксированнаяЧасть ВариантнаяЧасть |
              ВариантнаяЧасть.
ФиксированнаяЧасть = СекцияЗаписи { "," СекцияЗаписи }.
СекцияЗаписи = [ ИмяПоля { "," ИмяПоля } ":" Тип ].
ВариантнаяЧасть = CASE Дискриминант ИмяТипа OF Вариант { ";"Вариант }.
Дискриминант = [ ИмяПоля ":" ].
Вариант = [ СписокМетокВарианта ":" "(" СписокПолей ")" ].
СписокМетокВарианта = МеткаВарианта { "," МеткаВарианта }.
МеткаВарианта = Константа.
МножественныйТип = SET OF БазовыйТип.
БазовыйТип = ПростойТип.
ФайловыйТип = FILE OF Тип.
СсылочныйТип = "^" ИмяТипа.
РазделПеременных = [ VAR ОписаниеПеременной ";"{ ОписаниеПеременной ";" } ].
ОписаниеПеременной = Имя { "," Имя } ":" Тип.
РазделПроцедурИФункций = { ОписаниеПроцедурыИлиФункции ";" }.
ОписаниеПроцедурыИлиФункции = ОписаниеПроцедуры | ОписаниеФункции.
ОписаниеПроцедуры = ЗаголовокПроцедуры Блок.
ЗаголовокПроцедуры = PROCEDURE Имя ";"| PROCEDURE Имя "(" РаздФормПараметров
                     { ";" РаздФормПараметров }")" ";".
РаздФормПараметров = ГруппаПараметров | VAR ГруппаПараметров |
                     FUNCTION ГруппаПараметров | PROCEDURE Имя { "," Имя }.
ГруппаПараметров = Имя { "," Имя } ":" ИмяТипа.
ОписаниеФункции = ЗаголовокФункции Блок.
ЗаголовокФункции = FUNCTION Имя ":" ТипРезультата ";" |
                   FUNCTION Имя "(" РаздФормПараметров { ";" РаздФормПараметров }")" ":"

                   ТипРезультата ";".
ТипРезультата = ИмяТипа.
РазделОператоров = СоставнойОператор.
Оператор = НепомеченныйОператор | Метка ":" НепомеченныйОператор.
НепомеченныйОператор = ПростойОператор | СложныйОператор.
ПростойОператор = ОператорПрисваивания | ОператорПроцедуры |
                  ОператорПерехода | ПустойОператор.
ОператорПрисваивания = Переменная ":=" Выражение | ИмяФункции ":=" Выражение.
Переменная = ПолнаяПеременная | КомпонентаПеременной | УказаннаяПеременная.
ПолнаяПеременная = ИмяПеременной.
ИмяПеременной = Имя.
КомпонентаПеременной = ИндексированнаяПеременная ОбозначениеПоля | БуферФайла.
ИндексированнаяПеременная = ПеременнаяМассив [ Выражение {"," Выражение } ].
ПеременнаяМассив = Переменная.
ОбозначениеПоля = ПеременнаяЗапись "." ИмяПоля.
ПеременнаяЗапись = Переменная.
ИмяПоля = Имя.
БуферФайла = ПеременнаяСсылка "^".
ПеременнаяФайл = Переменная.
УказаннаяПеременная = ПеременнаяФайл "^".
ПеременнаяСсылка = Переменная.
Выражение = ПростоеВыражение | ПростоеВыражение ОперацияОтношения
            ПростоеВыражение.
ОперацияОтношения = "=" | "<>" | "<" | ">" | "<=" | ">=" | IN.
ПростоеВыражение = Слагаемое | Знак Слагаемое | ПростоеВыражение
                   АддитивнаяОперация Слагаемое.
АддитивнаяОперация = "+" | "-" | OR.
Слагаемое = Множитель | Слагаемое МультипликативнаяОперация Множитель.
МультипликативнаяОперация = "*" | "/" | DIV | MOD | AND.
Множитель = Переменная | КонстБезЗнака | "(" Выражение ")" | ОбозначениеФункции |
            "(" Множество ")" | NOT Множитель.
КонстБезЗнака = ЧислоБезЗнака | Строка | ИмяКонстанты | NIL.
ОбозначениеФункции = ИмяФункции | ИмяФункции "(" ФактПараметр { ","
                     ФактПараметр } ")".
ИмяФункции = Имя.
Множество = [ СписокЭлементов ].
СписокЭлементов = [ Элемент { "," Элемент } ].
Элемент = Выражение | Выражение ".." Выражение.
ОператорПроцедуры = ИмяПроцедуры | ИмяПроцедуры "(" ФактПараметр { ","
                    ФактПараметр } ")".
ИмяПроцедуры = Имя.
ФактПараметр = Выражение | Переменная | ИмяПроцедуры | ИмяФункции.
ОператорПерехода = GOTO Метка.
ПустойОператор = Пусто.
Пусто =  .
СложныйОператор = СоставнойОператор | ВыбирающийОператор | ОператорЦикла |
                  ОператорПрисоединения.
СоставнойОператор = BEGIN Оператор { "," Оператор } END.
ВыбирающийОператор = УсловныйОператор | ОператорВарианта.
УсловныйОператор = IF Выражение THEN Оператор |
                   IF Выражение THEN Оператор ELSE Оператор.
ОператорВарианта = CASE Выражение OF ЭлементСпискаВариантов
                   { ";" ЭлементСпискаВариантов } END.
ЭлементСпискаВариантов = [ СписокМетокВарианта ":" Оператор ].
СписокМетокВарианта = МеткаВарианта { "," МеткаВарианта }.
ОператорЦикла = ЦиклСПредУсловием | ЦиклСПостУсловием | ЦиклСПараметром.
ЦиклСПредУсловием = WHILE Выражение DO Оператор.
ЦиклСПостУсловием = REPEAT Оператор { "," Оператор } UNTIL Выражение.
ЦиклСПараметром = FOR ПараметрЦикла ":=" СписокЦикла DO Оператор.
СписокЦикла = НачЗнач TO КонЗнач | НачЗнач DOWNTO КонЗнач.
ПараметрЦикла = Имя.
НачЗнач = Выражение.
КонЗнач = Выражение.
ОператорПрисоединения = WITH СписокПеременныхЗаписей DO Оператор.
СписокПеременныхЗаписей = ПеременнаяЗапись { "," ПеременнаяЗапись }.