gux/doc/gux.bnf

70 lines
1.1 KiB
BNF
Raw Normal View History

ROOT ::= INSTR*
2024-02-10 15:16:00 +00:00
INSTR ::=
| LEXPR semicolon
| BEXPR
2024-02-10 15:16:00 +00:00
EXPR ::= LEXPR | BEXPR
LEXPR ::=
2024-02-10 15:16:00 +00:00
| OR
| ASSERT EXPR
| VARDECL
| CONSTDECL
2024-02-16 21:47:37 +00:00
| FUNDECL
| ASSIGN
2024-02-13 12:50:11 +00:00
| break
| continue
2024-02-16 21:47:37 +00:00
| return EXPR?
| FUN
2024-02-13 04:14:56 +00:00
BEXPR ::=
| BLOCK
| IF
2024-02-13 12:50:11 +00:00
| WHILE
2024-02-13 04:14:56 +00:00
2024-02-16 21:47:37 +00:00
2024-02-13 04:14:56 +00:00
IF ::=
| if EXPR BLOCK
| if EXPR BLOCK else BLOCK
| if EXPR BLOCK else IF
2024-02-13 12:50:11 +00:00
WHILE ::= while EXPR BLOCK
2024-02-16 21:47:37 +00:00
FUN ::= fun PARAMS (rarrow TYPE) BLOCK
PARAMS ::=
| opar ident colon TYPE (comma ident colon type)* cpar
BLOCK ::= obrace INSTR* cbrace
2024-02-16 21:47:37 +00:00
VARDECL ::= var ident colon TYPE? assign EXPR
CONSTDECL ::= ident colon TYPE? assign EXPR
FUNDECL ::= fun ident PARAMS (rarrow TYPE) BLOCK
ASSIGN ::= ident assign EXPR
2024-02-10 15:16:00 +00:00
OR ::= AND (or AND)*
2024-02-11 14:45:39 +00:00
AND ::= EQNE (and EQNE)*
EQNE ::= CMP ((eq|ne) CMP)?
CMP ::= TERM ((lt|le|gt|ge) TERM)?
TERM ::= FACTOR ((add|sub) FACTOR)*
FACTOR ::= POW ((mul|div|mod) POW)*
POW ::= NOT (pow NOT)?
2024-02-10 15:16:00 +00:00
2024-02-16 21:47:37 +00:00
NOT ::= not* CALL
CALL ::= LITERAL ARGS*
ARGS ::= opar (EXPR (comma EXPR)*)? cpar
LITERAL ::=
| ident
| BUILTIN
| opar EXPR cpar
CALL ::= LITERAL ARGS*
ARGS ::= opar (EXPR (comma EXPR)*)? cpar
2024-02-11 14:45:39 +00:00
BUILTIN ::= bool | int | float | string
2024-02-16 21:47:37 +00:00
TYPE ::=
| type
| opar TYPE+ rarrow TYPE+ cpar