2024-02-12 19:21:05 +00:00
|
|
|
ROOT ::= INSTR*
|
2024-02-10 15:16:00 +00:00
|
|
|
|
|
|
|
INSTR ::=
|
2024-02-12 19:21:05 +00:00
|
|
|
| LEXPR semicolon
|
|
|
|
| BEXPR
|
2024-02-10 15:16:00 +00:00
|
|
|
|
2024-02-12 19:21:05 +00:00
|
|
|
EXPR ::= LEXPR | BEXPR
|
|
|
|
|
|
|
|
LEXPR ::=
|
2024-02-10 15:16:00 +00:00
|
|
|
| OR
|
|
|
|
| ASSERT EXPR
|
2024-02-12 19:21:05 +00:00
|
|
|
| VARDECL
|
|
|
|
| CONSTDECL
|
|
|
|
| ASSIGN
|
|
|
|
|
2024-02-13 04:14:56 +00:00
|
|
|
BEXPR ::=
|
|
|
|
| BLOCK
|
|
|
|
| IF
|
|
|
|
|
|
|
|
IF ::=
|
|
|
|
| if EXPR BLOCK
|
|
|
|
| if EXPR BLOCK else BLOCK
|
|
|
|
| if EXPR BLOCK else IF
|
2024-02-12 19:21:05 +00:00
|
|
|
|
|
|
|
BLOCK ::= obrace INSTR* cbrace
|
|
|
|
VARDECL ::= var ident colon type? assign EXPR
|
|
|
|
CONSTDECL ::= ident colon type? assign EXPR
|
|
|
|
ASSIGN ::= ident assign EXPR
|
2024-02-10 15:16:00 +00:00
|
|
|
|
|
|
|
OR ::= AND (or AND)*
|
2024-02-11 14:45:39 +00:00
|
|
|
AND ::= EQNE (and EQNE)*
|
|
|
|
EQNE ::= CMP ((eq|ne) CMP)?
|
|
|
|
CMP ::= TERM ((lt|le|gt|ge) TERM)?
|
|
|
|
TERM ::= FACTOR ((add|sub) FACTOR)*
|
|
|
|
FACTOR ::= POW ((mul|div|mod) POW)*
|
|
|
|
POW ::= NOT (pow NOT)?
|
2024-02-10 15:16:00 +00:00
|
|
|
|
2024-02-11 14:45:39 +00:00
|
|
|
NOT ::= not* LITERAL
|
2024-02-12 19:21:05 +00:00
|
|
|
LITERAL ::= ident | BUILTIN | opar EXPR cpar
|
2024-02-11 14:45:39 +00:00
|
|
|
BUILTIN ::= bool | int | float | string
|