2024-03-18 17:20:40 +00:00
|
|
|
MODULE ::= EXPR*
|
|
|
|
EXPR ::=
|
2024-03-20 15:26:59 +00:00
|
|
|
| OR
|
2024-03-18 17:20:40 +00:00
|
|
|
| ASSERT
|
2024-03-21 11:00:20 +00:00
|
|
|
| DECL
|
2024-03-22 07:01:21 +00:00
|
|
|
| ASSIGN
|
2024-03-22 07:57:44 +00:00
|
|
|
| BEGIN
|
2024-03-22 15:33:41 +00:00
|
|
|
| IF end
|
2024-03-22 22:01:20 +00:00
|
|
|
| WHILE
|
|
|
|
| continue
|
|
|
|
| break
|
|
|
|
WHILE ::= while EXPR BLOCK end
|
2024-03-22 15:33:41 +00:00
|
|
|
IF ::=
|
|
|
|
| if EXPR BLOCK (else (IF | BLOCK))?
|
2024-03-22 07:57:44 +00:00
|
|
|
BEGIN ::= begin BLOCK end
|
|
|
|
BLOCK ::= EXPR*
|
2024-03-22 07:01:21 +00:00
|
|
|
ASSIGN ::= (ident|INDEX) assign EXPR
|
2024-03-22 07:20:31 +00:00
|
|
|
DECL ::= (var|const) ident assign EXPR
|
2024-03-18 17:20:40 +00:00
|
|
|
ASSERT ::= (assert_eq|assert_ne) tuple
|
2024-03-19 06:11:28 +00:00
|
|
|
OR ::= AND (or AND)*
|
2024-03-19 15:25:02 +00:00
|
|
|
AND ::= EQNE (and EQNE)*
|
|
|
|
EQNE ::= CMP ((eq|ne) CMP)?
|
|
|
|
CMP ::= TERM ((lt|le|gt|ge) TERM)?
|
2024-03-18 17:20:40 +00:00
|
|
|
TERM ::= FACTOR ((add|sub) FACTOR)*
|
|
|
|
FACTOR ::= USUB ((mul|div|mod) USUB)*
|
2024-03-19 06:11:28 +00:00
|
|
|
USUB ::= sub* NOT
|
|
|
|
NOT ::= not* POW
|
2024-03-20 15:26:59 +00:00
|
|
|
POW ::= IN (pow IN)?
|
|
|
|
IN ::= LITERAL (in LITERAL)?
|
2024-03-18 17:20:40 +00:00
|
|
|
LITERAL ::=
|
|
|
|
| BUILTIN
|
|
|
|
| TUPLE
|
2024-03-19 07:56:41 +00:00
|
|
|
| INDEX
|
2024-03-20 15:26:59 +00:00
|
|
|
| ARRAY
|
2024-03-18 17:20:40 +00:00
|
|
|
| opar EXPR cpar
|
2024-03-20 15:26:59 +00:00
|
|
|
ARRAY ::= osquare (EXPR (comma EXPR)*)? csquare
|
2024-03-19 07:56:41 +00:00
|
|
|
INDEX ::=
|
2024-03-21 11:00:20 +00:00
|
|
|
| (TUPLE|str|ident|ARRAY) osquare (EXPR (comma EXPR)*)? csquare
|
2024-03-18 17:20:40 +00:00
|
|
|
TUPLE ::=
|
|
|
|
| opar EXPR+ cpar
|
2024-03-21 11:00:20 +00:00
|
|
|
BUILTIN ::= num | bool | str | ident
|