blob: f9daded6f23deafc63685ed32777788c95b76688 (
plain)
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
|
-terminal
TERMINAL NONTERM LEFT RIGHT COLON NOPREC
PIPE SEMICOL DOT
IDEN NUM ACTION;
-nonterminal
S A B C
Type Prec Prod Preclist Prodlist
Actionlist Idenlist IorNlist.
-noprec.
S: A B C {};
A: TERMINAL Idenlist SEMICOL NONTERM Idenlist DOT { handle_type(A(1), A(4)) };
B: Preclist { handle_prec(A(0)); }
| NOPREC DOT { handle_prec(NULL); };
Preclist: Prec SEMICOL Preclist { v = list_new_head(A(2), A(0)); }
| Prec DOT { v = A(0); };
Prec: LEFT IorNlist { v = prec_new(A(1), PRECEDENCE_LEFT_ASSOC); }
| RIGHT IorNlist { v = prec_new(A(1), PRECEDENCE_RIGHT_ASSOC); };
C: Prodlist { handle_prod(A(0)); };
Prodlist: Prod SEMICOL Prodlist { v = list_new_head(A(2), A(0)); }
| Prod DOT { v = A(0); };
Prod: IDEN COLON Actionlist { v = prod_new(A(0), A(2)); };
Actionlist: Idenlist ACTION PIPE Actionlist { v = list_new_head(A(3), action_new(A(0), A(1))); }
| Idenlist ACTION { v = action_new(A(0), A(1)); };
Idenlist: IDEN Idenlist { v = list_new_head(A(1), ptr_new(A(0))); }
| IDEN { v = ptr_new(A(0)); };
IorNlist: IDEN IorNlist { v = list_new_head(A(1), ptr_new(A(0))); }
| IDEN { v = ptr_new(A(0)); }
| NUM IorNlist { v = list_new_head(A(1), num_new(A(0))); }
| NUM { v = num_new(A(0)); }.
|