Алгол-60
Описание подготовлено С. Командировой

ОсновнойСимвол = Буква | Цифра | ЛогЗначение | Ограничитель.
Буква = "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".
ЛогЗначение = TRUE | FALSE.
Ограничитель = ЗнакОперации | Разделитель | Скобка | Описатель | Спецификатор.
ЗнакОперации = ЗнакАрифмОперации | ЗнакОперацииОтношения | ЗнакЛогОперации |
               ЗнакОперацииСледования.
ЗнакАрифмОперации = "+" | "-" | "*" | "/" | "^".
ЗнакОперацииОтношения = "<" | "<=" | ">" | ">=" | "<>".
ЗнакЛогОперации = "\/" | "/\" | "¬" | "с" | "Ё".
ЗнакОперацииСледования = GO TO | IF | THEN | ELSE | FOR | DO.
Разделитель = "," | "." | "10" | ":" | ";" | ":=" | STEP | UNTIL | WHILE |
              COMMENT.
Скобка = "(" | ")" | "[" | "]" | "'" | "`" | BEGIN | END.
Описатель = OWN | BOOLEAN | INTEGER | REAL | ARRAY | SWITCH | PROCEDURE.
Спецификатор = STRING | LABEL | VALUE.
Идентификатор = Буква| Идентификатор Буква | Идентификатор Цифра.
ЦелоеБезЗнака = Цифра | ЦелоеБезЗнака Цифра.
Целое = ЦелоеБезЗнака | "+" ЦелоеБезЗнака | "-" ЦелоеБезЗнака.
ПравильнаяДробь = "." ЦелоеБезЗнака.
Порядок = "10" Целое.
ДесятичноеЧисло = ЦелоеБезЗнака |  ПравильнаяДробь | ЦелоеБезЗнака
                  ПравильнаяДробь.
ЧислоБезЗнака = ДесятичноеЧисло | Порядок | ДесятичноеЧисло Порядок.
Число = ЧислоБезЗнака | "+" ЧислоБезЗнака | "-" ЧислоБезЗнака.

ЧистаяСтрока = [ символ ].
ОткрытаяСтрока = ЧистаяСтрока | ЧистаяСтрока ЗамкнутаяСтрока ОткрытаяСтрока.
ЗамкнутаяСтрока = "'" ОткрытаяСтрока "'".
Строка = ЗамкнутаяСтрока | ЗамкнутаяСтрока Строка.

ИдентификаторПеременной = Идентификатор.
ПростаяПеременная = ИдентификаторПеременной.
ИндексноеВыражение = АрифмВыражение.
СписокИндексов = ИндексноеВыражение | СписокИндексов "," ИндексноеВыражение.
ИдентификаторМассива = Идентификатор.
ПеременнаяСИндексами = ИдентификаторМассива [ СписокИндексов ].
Переменная = ПростаяПеременная | ПеременнаяСИндексами.
Выражение = АрифмВыражение | ЛогВыражение | ИменующееВыражение.
ИдентификаторПроцедуры = Идентификатор.
ФактПараметр = Строка | Выражение | ИдентификаторМассива |
                      ИдентификаторПереключателя | ИдентификаторПроцедуры.
СтрокаБукв = Буква | СтрокаБукв Буква.
ОграничительПараметра = "," | ")" СтрокаБукв ":" "(".
СписокФактПараметров = ФактПараметр | СписокФактПараметров
                       ОграничительПараметра ФактПараметр.
СовокупностьФактПараметров = [ "(" СписокФактПараметров ")" ].
УказательФункции = ИдентификаторПроцедуры СовокупностьФактПараметров.

ЗнакОперацииТипаСложения = "+"| "-".
ЗнакОперацииТипаУмножения = "*"|"/"| ":".
ПервичноеВыражение = ЧислоБезЗнака | Переменная | УказательФункции |
                     "(" АрифмВыражение ")".
Множитель = ПервичноеВыражение | Множитель "^" ПервичноеВыражение.
Терм = Множитель | Терм ЗнакОперацииТипаУмножения Множитель.
ПростАрифмВыражение = Терм | ЗнакОперацииТипаСложения Терм |
                      ПростАрифмВыражение ЗнакОперацииТипаСложения Терм.
Условие = IF ЛогВыражение THEN.
АрифмВыражение = ПростАрифмВыражение | Условие ПростАрифмВыражение
                 ELSE АрифмВыражение.
Отношение = ПростАрифмВыражение ЗнакОперацииОтношения ПростАрифмВыражение.
ПервичЛогВыражение = ЛогВыражение | Переменная |
                     УказательФункции | Отношение | "(" ЛогВыражение ")".
ВторЛогВыражение = ПервичЛогВыражение | "г" ПервичЛогВыражение.
ЛогОдночлен = ВторЛогВыражение | ЛогОдночлен "/\" ВторЛогВыражение.
ЛогическийТерм = ЛогОдночлен | ЛогическийТерм "\/" ЛогОдночлен.
Импликация = ЛогическийТерм | Импликация "с" ЛогическийТерм.
ПростЛогВыражение = Импликация | ПростЛогВыражение "=" Импликация.
ЛогВыражение = ПростЛогВыражение | Условие ПростЛогВыражение ELSE
                      ЛогВыражение.

Метка = Идентификатор.
ИдентификаторПереключателя = Идентификатор.
УказательПереключателя = ИдентификаторПереключателя [ ИндексноеВыражение ].
ПростИменВыражение = Метка | УказательПереключателя |
                           "(" ИменующееВыражение ")".
ИменующееВыражение = ПростИменВыражение | Условие ПростИменВыражение ELSE
                     ИменующееВыражение.

НепомечОснОператор = ОператорПрисваивания | ОператорПерехода |
                     ПустойОператор | ОператорПроцедуры.
ОсновнойОператор = НепомечОснОператор | Метка ":" ОсновнойОператор.
БезусловныйОператор = ОсновнойОператор | СоставнойОператор | Блок.
Оператор = БезусловныйОператор | УсловныйОператор | ОператорЦикла.
КонецСоставного = Оператор END | Оператор ";" КонецСоставного.
ЗаголовокБлока = BEGIN Описание | ЗаголовокБлока ";" Описание.
НепомеченныйСоставной = BEGIN КонецСоставного.
НепомеченныйБлок = ЗаголовокБлока ";" КонецСоставного.
СоставнойОператор = НепомеченныйСоставной | Метка ":" СоставнойОператор.
Блок = НепомеченныйБлок | Метка ":" Блок.
Программа = Блок | СоставнойОператор.

Получатель = Переменная | ИдентификаторПроцедуры.
ЛеваяЧасть = Получатель ":=".
СписокЛевойЧасти = ЛеваяЧасть | СписокЛевойЧасти ЛеваяЧасть.
ОператорПрисваивания = СписокЛевойЧасти АрифмВыражение |
                       СписокЛевойЧасти ЛогВыражение.

ОператорПерехода = GO TO ИменующееВыражение.

Пусто =  .
ПустойОператор = Пусто.

Условие = IF ЛогВыражение THEN.
БезусловныйОператор = ОсновнойОператор | СоставнойОператор | Блок.
ОператорЕсли = Условие БезусловныйОператор.
УсловныйОператор = ОператорЕсли | ОператорЕсли ELSE Оператор | Условие
                   ОператорЦикла | Метка ":" УсловныйОператор.

ЭлементСпискаЦикла = АрифмВыражение | АрифмВыражение STEP АрифмВыражение
                     UNTIL АрифмВыражение | АрифмВыражение WHILE ЛогВыражение.
СписокЦикла = ЭлементСпискаЦикла | СписокЦикла "," ЭлементСпискаЦикла.
ЗаголовокЦикла = FOR Идентификатор ":=" СписокЦикла DO.
ОператорЦикла = ЗаголовокЦикла Оператор | Метка ":" ОператорЦикла.

ФактическийПараметр = Строка | АрифмВыражение | ИдентификаторМассива |
                      ИдентификаторПереключателя | ИдентификаторПроцедуры.
СтрокаБукв = Буква | СтрокаБукв Буква.
ОграничительПараметра = "," | ")" СтрокаБукв ":" "(".
СписокФактПараметров = ФактическийПараметр | СписокФактПараметров
                       ОграничительПараметра ФактическийПараметр.
СовокупностьФактическихПараметров = [ "(" СписокФактПараметров ")" ].
ОператорПроцедуры = ИдентификаторПроцедуры СовокупностьФактическихПараметров.
Описание = ОписаниеТипа | ОписаниеМассива | ОписаниеПереключателя |
           ОписаниеПроцедуры.
СписокТипа = ПростаяПеременная | ПростаяПеременная "," СписокТипа.
Тип = REAL | INTEGER | BOOLEAN.
ЛокальныйИлиСобственный = [ OWN ].
ОписаниеТипа = ЛокальныйИлиСобственный Тип СписокТипа.
НижняяГраница = АрифмВыражение.
ВерхняяГраница = АрифмВыражение.
ГраничнаяПара = НижняяГраница ":" ВерхняяГраница.
СписокГраничныхПар = ГраничнаяПара | СписокГраничныхПар "," ГраничнаяПара.
СегментМассива = ИдентификаторМассива [ СписокГраничныхПар ] |
                  ИдентификаторМассива "," СегментМассива.
СписокМассивов = СегментМассива | СписокМассивов ","СегментМассива.
ОписательМассива = [ Тип ] ARRAY.
ОписаниеМассива = ЛокальныйИлиСобственный ОписательМассива СписокМассивов.

ПереключательныйСписок = ИменующееВыражение | ПереключательныйСписок ","
                         ИменующееВыражение.
ОписаниеПереключателя = SWITCH ИдентификаторПереключателя ":="
                        ПереключательныйСписок.

ФормальныйПараметр = Идентификатор.
СписокФормальныхПараметров = ФормальныйПараметр | СписокФормальныхПараметров
                             ОграничительПараметра ФормальныйПараметр.
СовокупностьФормальныхПараметров = [ "(" СписокФормальныхПараметров ")" ].
СписокИдентификаторов = Идентификатор | СписокИдентификаторов ","
                        Идентификатор.
СписокЗначений = [ VALUE СписокИдентификаторов ";" ].
Спецификация = STRING | Тип | ОписательМассива | LABEL | SWITCH | PROCEDURE |
               Тип PROCEDURE.
СовокупностьСпецификаций = [ Спецификация СписокИдентификаторов ";"|
                           СовокупностьСпецификаций Спецификация
                           СписокИдентификаторов";" ].
ЗаголовокПроцедуры = ИдентификаторПроцедуры СовокупностьФормальныхПараметров
                     ";" СписокЗначений СовокупностьСпецификаций.
ТелоПроцедуры = Оператор | код.
ОписаниеПроцедуры = PROCEDURE ЗаголовокПроцедуры ТелоПроцедуры |
                   Тип PROCEDURE ЗаголовокПроцедуры ТелоПроцедуры.