Lox Interpreter done (Chapter 13)

This commit is contained in:
Moritz Gmeiner 2023-01-28 14:19:12 +01:00
commit 719a014977
16 changed files with 707 additions and 196 deletions

11
GRAMMAR
View file

@ -23,25 +23,26 @@ declaration -> var_decl | fun_decl | class_decl ;
var_decl -> "var" IDENTIFIER ( "=" expression )? ";"
fun_decl -> "fun" IDENTIFIER "(" parameters ")" block ;
class_decl -> "class" IDENTIFIER "{" method* "}" ;
class_decl -> "class" IDENTIFIER ( "<" IDENTIFIER ) "{" method* "}" ;
method -> IDENTIFIER "(" parameters ")" block ;
expression -> assignment
assignment -> IDENTIFIER "=" assignment | logic_or ;
assignment -> ( call_or_get "." )? IDENTIFIER "=" assignment | logic_or ;
logic_or -> logic_and ( "or" logic_and )* ;
logic_and -> equality ( "and" equality )* ;
equality -> comparison ( ( "==" | "!=" ) comparison )* ;
comparison -> term ( ">" | ">=" | "<" | "<=" term )* ;
term -> factor ( ( "+" | "-" ) factor )*
factor -> unary ( ( "*" | "/" ) unary )* ;
unary -> ( "!" | "-" ) unary | call ;
unary -> ( "!" | "-" ) unary | call_or_get ;
call -> primary ( "(" arguments? ")" )* ;
call_or_get -> primary ( "(" arguments? ")" | "." IDENTIFIER )* ;
arguments -> expression ( "," expression )* ;
primary -> "(" expression ")" | IDENTIFIER | lambda | NUMBER | STRING | "true" | "false" | "nil" ;
primary -> "(" expression ")" | IDENTIFIER | lambda | NUMBER | STRING | "true" | "false" | "nil"
| "this" | "super" "." IDENTIFIER ;
lambda -> "fun" "(" parameters ")" block ;