[gram]
00: $start   all
01: all   all$1 Dump::Symbols();
02: all$1  
03: all$1   all$1 var_dec_list ;
04: all$1   all$1 simple_type:1 name:2 (:3 $3=Proc::OpenHead($2,$1); proc$2 ) Proc::CloseHead($3); block:6 Proc::CloseBody($3,$6);
05: all$1   all$1 error
06: proc$3   simple_type:1 var_name:2 Var::Declare($2,$1);
07: proc$3   proc$3 , simple_type:1 var_name:2 Var::Declare($2,$1);
08: proc$2  
09: proc$2   proc$3
10: var_dec_list   simple_type:1 var_dec_list$4:2 Var::Declare($2,$1);
11: var_dec_list$4   var_name:1 $1->next=$-;$$=$1;
12: var_dec_list$4   var_dec_list$4:3 , var_name:1 $1->next=$3;$$=$1;
13: var_name   name:1 var_name$5:2 =Symbol::NewVar($1,$2);
14: var_name$5  
15: var_name$5   var_name$5:4 [ num:2 ] =Type::NewDim($2,$4);
16: var_name$5   var_name$5 [ error ]
17: simple_type   auto =Type::Auto;
18: simple_type   void =Type::Void;
19: simple_type   float =Type::Float;
20: simple_type   int =Type::S32;
21: simple_type   char =Type::S8;
22: block   {:1 $1=Code::OpenBlock(); block$6 } =Code::CloseBlock($1);
23: block   {:1 error } =Code::CloseBlock($1);
24: block$6  
25: block$6   block$6 stmt
26: @stmt   @:1 $1=Code::OpenBlock(); stmt =Code::CloseBlock($1);
27: @  
28: stmt   block
29: stmt   break ; Code::Add(Code::Break);
30: stmt   continue ; Code::Add(Code::Continue);
31: stmt   return e_expr:2 ; Code::Add(Code::Return,$2);
32: stmt   input (expr):2 ; Code::Add(Code::Input,$2);
33: stmt   output (expr):2 ; Code::Add(Code::Output,$2);
34: stmt   while (expr):2 @stmt:3 Code::Add(Code::While,$2,$3);
35: stmt   do block:2 while (expr):4 ; Code::Add(Code::Do,$4,$2);
36: stmt   for ( e_expr:3 ; e_expr:5 ; e_expr:7 ) @stmt:9 Code::AddFor($3,$5,$7,$9);
37: stmt   if (expr):2 @stmt:3 Code::AddIf($2,$3,$s2); 
38: stmt   if (expr):2 @stmt:3 else @stmt:5 Code::AddIf($2,$3,$5);
39: stmt   expr:1 ; Code::Add(Code::Expr,$1);
40: stmt   var_dec_list ;
41: stmt   error ;
42: stmt   ;
43: e_expr  
44: e_expr   expr
45: (expr)   ( expr:2 ) =$2
46: (expr)   ( error )
47: expr   num:1 =new Code('0'      ,$1 );
48: expr   fnum =new Code('f',0)          ;
49: expr   name:1 ( call$7:3 ) =Code::NewCall($1,$3);
50: expr   name ( error )
51: expr   (expr)
52: expr   expr:1 -- =new Code(Code::Dec,$1   );
53: expr   expr:1 ++ =new Code(Code::Inc,$1   );
54: expr   - expr 
55: expr   ~ expr 
56: expr   ! expr 
57: expr   expr:1 + expr:3 =new Code('+'      ,$1,$3);
58: expr   expr:1 - expr:3 =new Code('-'      ,$1,$3);
59: expr   expr:1 & expr:3 =new Code('&'      ,$1,$3);
60: expr   expr:1 | expr:3 =new Code('|'      ,$1,$3);
61: expr   expr:1 ^ expr:3 =new Code('^'      ,$1,$3);
62: expr   expr:1 * expr:3 =new Code('*'      ,$1,$3);
63: expr   expr:1 % expr:3 =new Code('%'      ,$1,$3);
64: expr   expr:1 / expr:3 =new Code('/'      ,$1,$3);
65: expr   expr:1 < expr:3 =new Code('<'      ,$1,$3);
66: expr   expr:1 > expr:3 =new Code('>'      ,$1,$3);
67: expr   expr:1 || expr:3 =new Code(Code::Or ,$1,$3);
68: expr   expr:1 && expr:3 =new Code(Code::And,$1,$3);
69: expr   expr:1 << expr:3 =new Code(Code::SL ,$1,$3);
70: expr   expr:1 >> expr:3 =new Code(Code::SR ,$1,$3);
71: expr   expr:1 := expr:3 =new Code('='      ,$1,$3);
72: expr   expr:1 == expr:3 =new Code(Code::Eq ,$1,$3);
73: expr   expr:1 >= expr:3 =new Code(Code::Le ,$1,$3);
74: expr   expr:1 <= expr:3 =new Code(Code::Ge ,$1,$3);
75: expr   expr:1 <> expr:3 =new Code(Code::Ne ,$1,$3);
76: expr   name:1 =new Code('n'      ,$1   );
77: expr   expr:1 [ expr:3 ] =new Code('['      ,$1,$3);
78: expr   expr [ error ]
79: expr   expr:1 . name:3 =new Code('.'      ,$3,$1);
80: call$8   expr:1 =new Code(Code::Expr,$1,(Code*)$-);
81: call$8   expr:1 , call$8:3 =new Code(Code::Expr,$1,(Code*)$3);
82: call$7  
83: call$7   call$8
.nameerror;simple_typevar_dec_listvar_namevar_dec_list$4all$1all
0       12r2
1 → (15) s9 34    r1
2         r0
3s11    1213   
4  s14       
5r17        r17
6r18        r18
7r20        r20
8r19        r19
9 r5       r5
10r21        r21

.({)autovoidintfloat[,charsimple_typevar_nameproc$3proc$2var_name$5
11s15             16r14
12        r11      r11
13        s17      r10
14   r3r3r3r3  r3     r3
15   s5s6s7s8  s1018 1920 r8
16  r13    s21r13      r13
17 → (18)           23    
18 → (29)           24    
19 r9r9     s25      r9
20 <err0>s26             

.name{]}errornumsimple_typevar_nameblockblock$6
21    s27s28     
22 → (11)          r14
23          r12
24          r6
25 → (15)      29    
26 s30      31  
27  s32        
28  s33        
29s22      34   
30   <err1>s35    36r24
31    r4     r4
32          r16
33          r15
34          r7
35   s37       

.({})autowhilevoidreturnoutputintinputifforfloatdocontinuebreakerror;char$endexprsimple_typevar_dec_listvar_namevar_dec_list$4blockstmt
36 → (40)s43s30s45 s5s46s6s47s48s7s49s50s51s8s52s53s54s57s58s10<err2>384144  5660 
37r23r23r23 r23r23r23r23r23r23r23r23r23r23r23r23r23r23r23r23r23       r23
38 → (127)   <err3>              s86          
39   r48              r48         r48
40 → (43)s43                    87       
41 → (29)                        1213   
42s88  r76              r76         r76
43 → (63)s43                s90   89       
44                  s91          
45r22r22r22 r22r22r22r22r22r22r22r22r22r22r22r22r22r22r22r22r22       r22

.(;exprblock(expr)e_expr
46 → (48)s43   92  
47 → (98)s43 93 6194r43
48 → (50)s43   95  
49 → (48)s43   96  
50s43   97  
51s98      
52 → (26)   99   
53 s100     
54 s101     
55 → (63)s43 102 61  
56r28r28    r28
57 s103     
58r42r42    r42
59 r47    r47
60r25r25    r25
61 r51    r51
62 → (63)s43 104 61  
63 → (64)s43 105 61  
64 → (67)s43 106 61  
65 → (64)s43 107 61  
66 → (65)s43 108 61  

.fnum-name!num~expr(expr)
67 → (50)s39s40s42s55s59s6210961 
68 → (67)s39s40s42s55s59s6211061 
69 → (68)s39s40s42s55s59s6211161 
70 → (69)s39s40s42s55s59s6211261 
71 → (68)s39s40s42s55s59s6211361 
72 → (71)s39s40s42s55s59s6211461 
73 → (71)s39s40s42s55s59s6211561 
74 r52      r52
75 r53      r53
76  s116      

.errorexprcall$7call$8
77 → (78)s118117   
78 → (68) 119   
79 → (78) 120   
80 → (81) 121   
81 → (83) 122   
82 → (81) 123   
83 → (84) 124   
84 → (78) 125   
85 → (84) 126   
86    r39
87    r54
88 → (84)s128127129130r82

.);@@stmte_expr
89 → (127)s131<err0>    
90s132     
91 r40   r40
92 → (97)  133134 r27
93 → (89)r44r44   r44
94 s135    
95 s136    
96 s137    
97  133138 r27
98 → (148)    139r43

.-+while%/*&|^
99  s140       
100r30 r30      r30
101r29 r29      r29
102r56r56 r56r56r56r56r56r56r56
103r41 r41      r41
104r55r55 r55r55r55r55r55r55r55
105 → (106)r58r58 s80s81s82s83s84s85r58
106 → (108)r57r57 s80s81s82s83s84s85r57
107 → (108)s63s64 s80s81s82s83s84s85r75
108 → (121)s63s64 s80s81s82s83s84s85r74
109 → (108)s63s64 s80s81s82s83s84s85r73
110 → (108)s63s64 s80s81s82s83s84s85r66
111 → (110)s63s64 s80s81s82s83s84s85r65
112 → (110)s63s64 s80s81s82s83s84s85r72
113 → (112)s63s64 s80s81s82s83s84s85r71
114 → (127)s63s64 s80s81s82s83s84s85r67
115 → (114)s63s64 s80s81s82s83s84s85r68
116r79r79 r79r79r79r79r79r79r79

.].[>><<
117 → (38)s141s76s77s78s79 
118s142     
119 → (120)r70s76s77r70r70r70
120r69s76s77r69r69r69
121 → (120)r63s76s77s78s79r63
122 → (121)r64s76s77s78s79r64
123 → (122)r62s76s77s78s79r62
124 → (108)r59s76s77s78s79r59
125 → (124)r60s76s77s78s79r60
126 → (125)r61s76s77s78s79r61

.<><=>=><==:=||&&--++),;stmt
127 → (110)s65s66s67s68s69s70s71s72s73s74s75r80s143  r80
128           s144    
129           s145 <err0>  
130           r83 r83 r83
131r45r45r45r45r45r45r45r45r45r45r45r45r45r45 r45
132r46r46r46r46r46r46r46r46r46r46r46r46r46r46 r46
133 → (36)             s58146 
134             r34 r34
135             r31 r31
136             r33 r33
137             r32 r32

.else;@stmt(expr)call$8
138s147r37   r37
139 s148    
140 → (50)   149  
141 r77   r77
142 r78   r78
143 → (88)   61150 
144 r50   r50
145 r49   r49
146r26r26   r26
147 → (156)  151  r27

.);expr@stmte_expr
148 → (88)  93 152r43
149 s153    
150r81    r81
151 r38   r38
152 s154    
153 r35   r35
154 → (148)  93 155r43
155s156     
156 → (97)   157 r27
157 r36   r36