Грамматика v1.0
<Программа> → { <Оператор> }
<Оператор> → <Определение функции>
| <Функция IO>
| <Объявление переменных>
| <Присваивание>
| <Выражение> “;”
| <Оператор if>
| <Оператор switch>
| <Цикл while>
| <Цикл for>
| <break>
| <continue>
| <return>
| “;”
<Определение функции> → "function" <Идентификатор> "(" <Список параметров> ")" ":" [<Тип> | “Void”] "{" { <Оператор> } "}"
<Список параметров> → [ <Параметр> { "," <Параметр> } ]
<Параметр> → <Тип> <Идентификатор>
<Тип> → "Int" | "Float" | "Bool" | "Char" | “String” | "Array" "<" <Тип> ">"
<Функция IO> → "Read" "(" <Список идентификаторов> ")" “;”
| “Readln” "(" <Список идентификаторов> ")" “;”
| "Write" "(" <Список идентификаторов> ")" “;”
| "Writeln" "(" <Список идентификаторов> ")" “;”
<Список идентификаторов> → <Идентификатор> { "," <Идентификатор> }
<Объявление переменных> → <Тип> <Список переменных>
<Список переменных> → <Переменная> { "," <Переменная> }
<Переменная> → <Идентификатор> | <Идентификатор> "=" <Выражение>
<Присваивание> → <Идентификатор> "=" <Выражение>
<Выражение> → <Унарное выражение> | <Бинарное выражение> | <Операнд>
<Унарное выражение> → <Унарный оператор> <Выражение>
<Бинарное выражение> → <Выражение> <Бинарный оператор> <Выражение>
<Унарный оператор> → “!” | “+” | “-“
<Бинарный оператор> → "*" | "/" | "%"
| "+" | "-" |
| ">" | "<" | ">=" | "<="
| "==" | "!="
| "&"
| "^"
| "|"
| "->"
<Операнд> → <Идентификатор> | <Литерал> | "(" <Выражение> ")"
<Оператор if> → "if" "(" <Выражение> ")" "{" { <Оператор> } "}"
{ "elif" "(" <Выражение> ")" "{" { <Оператор> } "}" }
[ "else" "{" { <Оператор> } "}" ]
<Оператор switch> → "switch" "(" <Выражение> ")" "{" { <Блок case> } "}"
<Блок case> → "[" <Литерал> "]" "{" { <Оператор> } "}"
<Цикл while> → "while" "(" <Выражение> ")" "{" { <Оператор> } "}"
<Цикл for> → "for" "(" <Объявление переменных> ";" <Выражение> ";" <Присваивание> ")" "{" { <Оператор> } "}"
<break> → “break” “;”
<continue> → “continue” “;”
<return> → "return" [ <Выражение> ] “;”
<Program> -> {<Operator>}
*<Operator>*:
<FunctionDefinition> |
<IfStatement> |
<ForStatement> |
<WhileStatement> |
<SwitchStatement> |
<Expression> |
<VariableDeclaration>
*FunctionDefinition*:
'function' '(' <FunctionParams> ')' [ <TypeDeclaration> ] '{'
{<Expression> | <VariableDeclaration>}
'}'
*Expression*: