ccm/doc/grammar.bnf

42 lines
854 B
BNF

MODULE ::= EXPR*
EXPR ::=
| OR
| ASSERT
| DECL
| ASSIGN
| BEGIN
| IF end
| WHILE
| continue
| break
WHILE ::= while EXPR BLOCK end
IF ::=
| if EXPR BLOCK (else (IF | BLOCK))?
BEGIN ::= begin BLOCK end
BLOCK ::= EXPR*
ASSIGN ::= (ident|INDEX) assign EXPR
DECL ::= (var|const) ident assign EXPR
ASSERT ::= (assert_eq|assert_ne) tuple
OR ::= AND (or AND)*
AND ::= EQNE (and EQNE)*
EQNE ::= CMP ((eq|ne) CMP)?
CMP ::= TERM ((lt|le|gt|ge) TERM)?
TERM ::= FACTOR ((add|sub) FACTOR)*
FACTOR ::= USUB ((mul|div|mod) USUB)*
USUB ::= sub* NOT
NOT ::= not* POW
POW ::= IN (pow IN)?
IN ::= LITERAL (in LITERAL)?
LITERAL ::=
| BUILTIN
| TUPLE
| INDEX
| ARRAY
| opar EXPR cpar
ARRAY ::= osquare (EXPR (comma EXPR)*)? csquare
INDEX ::=
| (TUPLE|str|ident|ARRAY) osquare (EXPR (comma EXPR)*)? csquare
TUPLE ::=
| opar EXPR+ cpar
BUILTIN ::= num | bool | str | ident