ccm/doc/grammar.bnf

42 lines
854 B
BNF
Raw Normal View History

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
| 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
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