2024-03-31 21:10:56 +00:00
|
|
|
ROOT ::= EXPR*
|
2024-04-01 05:20:42 +00:00
|
|
|
EXPR ::=
|
2024-04-01 12:00:06 +00:00
|
|
|
| OR
|
2024-04-01 05:20:42 +00:00
|
|
|
| ASSERT
|
2024-04-02 15:33:31 +00:00
|
|
|
| VAR_DECL
|
|
|
|
| CONST_DECL
|
|
|
|
| ASSIGN
|
|
|
|
| BLOCK
|
2024-04-02 17:16:22 +00:00
|
|
|
| IF
|
2024-04-02 20:44:34 +00:00
|
|
|
| return EXPR
|
2024-04-06 07:17:08 +00:00
|
|
|
| FUN_DECL
|
2024-04-07 18:43:13 +00:00
|
|
|
| MOD_ACCESS
|
|
|
|
MOD_ACCESS ::= EXPR mod_access ident
|
2024-04-06 07:17:08 +00:00
|
|
|
FUN_DECL ::=
|
|
|
|
| fun ident opar PARAMS cpar EXPR* end
|
2024-04-02 17:16:22 +00:00
|
|
|
IF ::= if EXPR BLOCK (else (BLOCK | IF))?
|
2024-04-02 15:33:31 +00:00
|
|
|
BLOCK ::= begin EXPR* end
|
|
|
|
ASSIGN ::= ident assign EXPR
|
|
|
|
VAR_DECL ::= var ident assign EXPR
|
|
|
|
CONST_DECL ::= const ident assign EXPR
|
2024-04-01 05:20:42 +00:00
|
|
|
ASSERT ::= assert EXPR eq EXPR
|
2024-04-01 12:00:06 +00:00
|
|
|
OR ::= AND (or AND)*
|
2024-04-01 21:33:43 +00:00
|
|
|
AND ::= EQ (and EQ)*
|
|
|
|
EQ ::= CMP ((equal|not_equal) CMP)?
|
|
|
|
CMP ::= TERM ((lt|gt|le|ge) TERM)?
|
2024-03-31 23:32:47 +00:00
|
|
|
TERM ::= FACTOR ((add|sub) FACTOR)*
|
|
|
|
FACTOR ::= USUB ((mul|div|mod) USUB)*
|
2024-04-01 12:00:06 +00:00
|
|
|
USUB ::= sub* NOT
|
|
|
|
NOT ::= not* POW
|
2024-03-31 23:32:47 +00:00
|
|
|
POW ::= LITERAL (pow LITERAL)?
|
|
|
|
LITERAL ::=
|
|
|
|
| BUILTIN
|
|
|
|
| opar EXPR cpar
|
2024-04-02 15:33:31 +00:00
|
|
|
| ident
|
2024-04-02 20:44:34 +00:00
|
|
|
| FUN
|
|
|
|
| CALL
|
2024-04-07 18:43:13 +00:00
|
|
|
| MODULE
|
|
|
|
MODULE ::= module EXPR* end
|
|
|
|
CALL ::=
|
|
|
|
| (ident|MOD_ACCESS) opar ARGS cpar
|
2024-04-02 20:44:34 +00:00
|
|
|
ARGS ::= (EXPR (comma EXPR)*)?
|
|
|
|
FUN ::= fun opar PARAMS cpar EXPR* end
|
|
|
|
PARAMS ::= (EXPR (comma EXPR)*)?
|
2024-03-31 21:10:56 +00:00
|
|
|
BUILTIN ::=
|
|
|
|
| int
|
2024-04-01 12:00:06 +00:00
|
|
|
| bool
|
2024-04-01 19:08:42 +00:00
|
|
|
| float
|
2024-04-01 19:42:36 +00:00
|
|
|
| string
|