2023-12-09 17:24:41 +00:00
|
|
|
MOD ::= EXPR*
|
2023-12-11 17:01:22 +00:00
|
|
|
EXPR ::=
|
|
|
|
| ASSERT
|
2023-12-17 18:10:17 +00:00
|
|
|
| VARDECL
|
2023-12-18 13:19:38 +00:00
|
|
|
| VARSET
|
2023-12-18 18:34:31 +00:00
|
|
|
| SCOPE
|
|
|
|
| IF
|
2023-12-16 18:12:20 +00:00
|
|
|
| OR
|
2023-12-11 17:01:22 +00:00
|
|
|
ASSERT ::= assert EXPR
|
2023-12-17 18:10:17 +00:00
|
|
|
VARDECL ::= let ident assign EXPR
|
2023-12-18 13:19:38 +00:00
|
|
|
VARSET ::= ident assign EXPR
|
2023-12-18 18:34:31 +00:00
|
|
|
BLOCK ::= EXPR*
|
|
|
|
SCOPE ::= begin BLOCK end
|
|
|
|
IF ::= if EXPR then BLOCK (else BLOCK | IF)? end
|
2023-12-16 18:12:20 +00:00
|
|
|
OR ::= AND (or AND)*
|
|
|
|
AND ::= EQNE (and EQNE)*
|
2023-12-15 18:30:20 +00:00
|
|
|
EQNE ::=
|
2023-12-15 20:32:17 +00:00
|
|
|
| CMP
|
|
|
|
| CMP eq CMP
|
|
|
|
| CMP ne CMP
|
2023-12-15 21:31:01 +00:00
|
|
|
CMP ::= TERM ((lt | le | ge | gt) TERM)?
|
|
|
|
TERM ::= FACTOR ((add | sub) FACTOR)*
|
|
|
|
FACTOR ::= POWER ((mul | div | mod) POWER)*
|
|
|
|
POWER ::= UNARY (pow UNARY)?
|
2023-12-16 18:12:20 +00:00
|
|
|
UNARY ::= sub? GROUP | not? GROUP
|
2023-12-15 21:31:01 +00:00
|
|
|
GROUP ::= BUILTIN | opar EXPR cpar
|
2023-12-17 18:10:17 +00:00
|
|
|
BUILTIN ::= num | bool | str | ident
|