-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrammar.txt
107 lines (82 loc) · 2.39 KB
/
grammar.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
expr: LET expr1 EQUAL expr1
| expr1 EQUAL expr1
| expr1 PLUS_EQUAL expr1
| expr1 MINUS_EQUAL expr1
| expr1
expr1: expr2 AND expr1
| expr2 OR expr1
| expr2 XOR expr1
| expr2
expr2: expr3 DOUBLE_EQUAL expr2
| expr3 NEQ expr2
| expr3 GREATER_THAN expr2
| expr3 LESS_THAN expr2
| expr3 LEQ expr2
| expr3 GEQ expr2
| expr3 TRIPLE_EQUAL expr2
| expr3 NOT_TRIPLE_EQUAL expr2
| expr3
expr3: expr4 PLUS expr3
| expr4 MINUS expr3
| expr4
expr4: expr5 TIMES expr4
| expr5 DIVIDE expr4
| expr5
expr5: expr6 BITWISE_AND expr5
| expr6 BITWISE_OR expr5
| expr6 BITWISE_XOR expr5
| expr6
expr6: expr8 OPAREN optArgList CPAREN
| expr8 OPAREN optArgList CPAREN OBRACE optExprList CBRACE
| expr8 DOT IDENTIFIER
| expr8 OSQBRACE expr CSQBRACE
| expr8
expr7: primary
| ifExpr
| whileExpr
| anonFunc
| funcDef
| arrayLiteral
| OPAREN expr CPAREN
| unaryOpExpr
unaryOpExpr: RETURN expr
| NOT expr
| NEW expr
| MINUS expr
arrayLiteral : OSQBRACE optCommaExprList CSQBRACE
optArgList : EPSILON
| argList
argList : expr
| expr COMMA argList
optCommaExprList : EPSILON
| commaExprList
commaExprList : expr
| expr COMMA commaExprList
varDecl : LET IDENTIFIER
| LET IDENTIFIER EQUAL expression
funcDef : DEF IDENTIFIER OPAREN optParamList CPAREN OBRACE optExprList CBRACE
| DEF IDENTIFIER OPAREN optParamList CPAREN funcParam OBRACE optExprList CBRACE
funcParam : OPAREN IDENTIFIER CPAREN
| OPAREN IDENTIFIER COLON optParamList CPAREN
optParamList : EPSILON
| paramList
paramList : IDENTIFIER
| IDENTIFIER COMMA paramList
optExpressionList : EPSILON
| exprList
exprList : expr
| expr NEWLINE exprList
| expr SEMICOLON exprList
ifStatement : IF OPAREN expression CPAREN OBRACE expressionList CBRACE optElse
optElse : EPSILON
| ELSE ifStatement
| ELSE OBRACE expressionList CBRACE
whileStatement : WHILE OPAREN expression CPAREN OBRACE expressionList CBRACE
primary : NUMBER
| STRING
| TRUE
| FALSE
| NULL
| IDENTIFIER
anonFunc : DEF OPAREN optParamList CPAREN OBRACE optExpressionList CBRACE
| DEF OPAREN optParamList CPAREN funcParam OBRACE optExprList CBRACE