Files
fz-lang/docs/ru/reference/grammar_ebnf.md
T

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