# Грамматика (EBNF) Упрощённая грамматика текущего парсера: ``` program = { statement } ; statement = class | function | if | block | return | expression ";" ; block = "{" { statement } "}" ; class = "class" name "{" { declaration | function } "}" ; function = "fn" name "(" [ parameters ] ")" [ type-name ] statement ; parameters = parameter { "," parameter } ; parameter = type-name name ; return = "return" [ expression ] ";" ; if = "if" "(" expression ")" statement [ "else" statement ] ; expression = assignment ; assignment = new-expression [ "=" assignment ] ; new-expression = logical-or | "new" name ; logical-or = logical-and { "||" logical-and } ; logical-and = comparison { "&&" comparison } ; comparison = term { compare-op term } ; term = factor { ( "+" | "-" ) factor } ; factor = power { ( "*" | "/" | "%" ) power } ; power = unary [ "^" unary ] ; unary = ( "+" | "-" | "!" ) unary | postfix ; postfix = primary { call | member } ; call = "(" [ expression { "," expression } ] ")" ; member = "." name ; primary = literal | declaration | name | "(" expression ")" ; declaration = type-name name ; type-name = builtin-type | name ; ``` `literal` включает строковый, числовой, булев и `null` литералы. Комментарии `// ...` и пробельные символы между токенами игнорируются.