Формальна граматика мови

Граматика описана у розширеній БНФ:

Програма :: = {СтрокаПрограмми}

СтрокаПрограмми :: = (Операція ";") | (КеруючаКонстр ":") | ОголошенняФункції

Операція :: = Присвоєння | Друк | Введення | (КінецьГалуження)
             | (КінецьWhile) | (ПоверненняЗначення | КінецьФункції)

КеруючаКонстр :: = (Галуження | ГалуженняІнакше) | (ЦиклWhile)


Число :: = ["+" | "-"] НатЧісло

НатЧисло :: = Цифра {Цифра}

Цифра :: = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

Ідентифікатор :: = Буква {Буква | Цифра}

Змінна :: = Ідентифікатор

ВизовФункції :: = Ідентифікатор "(" {[Вираз [","]]} ")"

Присвоєння :: = Ідентифікатор "=" Вираз

Вираз :: = (Змінна | Число) | ВизовФункціі | Вираз МатОперація Вираз |
               "+" | "-" Вираз | "(" Вираз ")"

МатОперація :: = "+" | "-" | "*" | "/" | "%"

Друк :: = "print" (Рядок | Змінна)

Введення :: = "read" Змінна

Рядок :: = "" {.} ""


Галуження :: = "if" Вираз

ГалуженняІнакше :: = "else"

КінецьГалуження :: = "endif"


ЦиклWhile :: = "while" Вираз

КінецьWhile :: = "endwhile"


ОголошенняФункції :: = "function" Ідентифікатор "(" [{Параметр [","]}] ")"

Параметр :: = Змінна

ПоверненняЗначення :: = "return" Змінна

КінецьФункції :: = "endfunc"