1.5 KiB
1.5 KiB
Грамматика (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 литералы. Комментарии // ... и пробельные символы между токенами игнорируются.