ref: remove old docs variant
This commit is contained in:
@@ -1,33 +1,2 @@
|
||||
# Грамматика (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` литералы. Комментарии `// ...` и пробельные символы между токенами игнорируются.
|
||||
|
||||
Reference in New Issue
Block a user