1/*
2 * -*- tcl -*-
3 * Parsing Expression Grammar 'TEMPLATE'.
4 * Generated for unknown, from file 'TEST'
5 */
6
7/*
8 * Declaring the parse functions
9 */
10
11<<attributes>> void <<ns>>sym_AddOp (<<STATE>> <<state>>);
12<<attributes>> void <<ns>>sym_Digit (<<STATE>> <<state>>);
13<<attributes>> void <<ns>>sequence_9 (<<STATE>> <<state>>);
14<<attributes>> void <<ns>>sequence_14 (<<STATE>> <<state>>);
15<<attributes>> void <<ns>>kleene_16 (<<STATE>> <<state>>);
16<<attributes>> void <<ns>>sequence_18 (<<STATE>> <<state>>);
17<<attributes>> void <<ns>>choice_20 (<<STATE>> <<state>>);
18<<attributes>> void <<ns>>sym_Expression (<<STATE>> <<state>>);
19<<attributes>> void <<ns>>sequence_26 (<<STATE>> <<state>>);
20<<attributes>> void <<ns>>kleene_28 (<<STATE>> <<state>>);
21<<attributes>> void <<ns>>sequence_30 (<<STATE>> <<state>>);
22<<attributes>> void <<ns>>sym_Factor (<<STATE>> <<state>>);
23<<attributes>> void <<ns>>sym_MulOp (<<STATE>> <<state>>);
24<<attributes>> void <<ns>>optional_36 (<<STATE>> <<state>>);
25<<attributes>> void <<ns>>poskleene_39 (<<STATE>> <<state>>);
26<<attributes>> void <<ns>>sequence_41 (<<STATE>> <<state>>);
27<<attributes>> void <<ns>>sym_Number (<<STATE>> <<state>>);
28<<attributes>> void <<ns>>sym_Sign (<<STATE>> <<state>>);
29<<attributes>> void <<ns>>sym_Term (<<STATE>> <<state>>);
30
31/*
32 * Precomputed table of strings (symbols, error messages, etc.).
33 */
34
35static char const* <<string-table>> [21] = {
36    /*        0 = */   "cl '-+'",
37    /*        1 = */   "n AddOp",
38    /*        2 = */   "AddOp",
39    /*        3 = */   "cl '0123456789'",
40    /*        4 = */   "n Digit",
41    /*        5 = */   "Digit",
42    /*        6 = */   "t \50",
43    /*        7 = */   "t \51",
44    /*        8 = */   "n Expression",
45    /*        9 = */   "Expression",
46    /*       10 = */   "n Factor",
47    /*       11 = */   "Factor",
48    /*       12 = */   "cl '*/'",
49    /*       13 = */   "n MulOp",
50    /*       14 = */   "MulOp",
51    /*       15 = */   "n Number",
52    /*       16 = */   "Number",
53    /*       17 = */   "n Sign",
54    /*       18 = */   "Sign",
55    /*       19 = */   "n Term",
56    /*       20 = */   "Term"
57};
58
59/*
60 * Grammar Start Expression
61 */
62
63<<attributes>> void <<ns>><<main>> (<<STATE>> <<state>>) { <<prelude>>
64    <<self>> <<ns>>sym_Expression (<<state>>);
65    return;
66}
67
68/*
69 * value Symbol 'AddOp'
70 */
71
72<<attributes>> void <<ns>>sym_AddOp (<<STATE>> <<state>>) { <<prelude>>
73   /*
74    * [-+]
75    */
76
77    if (rde_param_i_symbol_start (<<state>>, 2)) return ;
78    rde_param_i_next_class (<<state>>, "-+", 0);
79    rde_param_i_symbol_done_leaf (<<state>>, 2, 1);
80    return;
81}
82
83/*
84 * value Symbol 'Digit'
85 */
86
87<<attributes>> void <<ns>>sym_Digit (<<STATE>> <<state>>) { <<prelude>>
88   /*
89    * [0123456789]
90    */
91
92    if (rde_param_i_symbol_start (<<state>>, 5)) return ;
93    rde_param_i_next_class (<<state>>, "0123456789", 3);
94    rde_param_i_symbol_done_leaf (<<state>>, 5, 4);
95    return;
96}
97
98/*
99 * value Symbol 'Expression'
100 */
101
102<<attributes>> void <<ns>>sym_Expression (<<STATE>> <<state>>) { <<prelude>>
103   /*
104    * /
105    *     x
106    *         '\('
107    *         (Expression)
108    *         '\)'
109    *     x
110    *         (Factor)
111    *         *
112    *             x
113    *                 (MulOp)
114    *                 (Factor)
115    */
116
117    if (rde_param_i_symbol_start_d (<<state>>, 9)) return ;
118    <<self>> <<ns>>choice_20 (<<state>>);
119    rde_param_i_symbol_done_d_reduce (<<state>>, 9, 8);
120    return;
121}
122
123<<attributes>> void <<ns>>choice_20 (<<STATE>> <<state>>) { <<prelude>>
124   /*
125    * /
126    *     x
127    *         '\('
128    *         (Expression)
129    *         '\)'
130    *     x
131    *         (Factor)
132    *         *
133    *             x
134    *                 (MulOp)
135    *                 (Factor)
136    */
137
138    rde_param_i_state_push_value (<<state>>);
139    <<self>> <<ns>>sequence_9 (<<state>>);
140    if (rde_param_i_bra_value2value(<<state>>)) return;
141    <<self>> <<ns>>sequence_18 (<<state>>);
142    rde_param_i_state_merge_value (<<state>>);
143    return;
144}
145
146<<attributes>> void <<ns>>sequence_9 (<<STATE>> <<state>>) { <<prelude>>
147   /*
148    * x
149    *     '\('
150    *     (Expression)
151    *     '\)'
152    */
153
154    rde_param_i_state_push_void (<<state>>);
155    rde_param_i_next_char (<<state>>, "\50", 6);
156    if (rde_param_i_seq_void2value(<<state>>)) return;
157    <<self>> <<ns>>sym_Expression (<<state>>);
158    if (rde_param_i_seq_value2value(<<state>>)) return;
159    rde_param_i_next_char (<<state>>, "\51", 7);
160    rde_param_i_state_merge_value (<<state>>);
161    return;
162}
163
164<<attributes>> void <<ns>>sequence_18 (<<STATE>> <<state>>) { <<prelude>>
165   /*
166    * x
167    *     (Factor)
168    *     *
169    *         x
170    *             (MulOp)
171    *             (Factor)
172    */
173
174    rde_param_i_state_push_value (<<state>>);
175    <<self>> <<ns>>sym_Factor (<<state>>);
176    if (rde_param_i_seq_value2value(<<state>>)) return;
177    <<self>> <<ns>>kleene_16 (<<state>>);
178    rde_param_i_state_merge_value (<<state>>);
179    return;
180}
181
182<<attributes>> void <<ns>>kleene_16 (<<STATE>> <<state>>) { <<prelude>>
183   /*
184    * *
185    *     x
186    *         (MulOp)
187    *         (Factor)
188    */
189
190    while (1) {
191        rde_param_i_state_push_2 (<<state>>);
192        <<self>> <<ns>>sequence_14 (<<state>>);
193        if (rde_param_i_kleene_close(<<state>>)) return;
194    }
195    return;
196}
197
198<<attributes>> void <<ns>>sequence_14 (<<STATE>> <<state>>) { <<prelude>>
199   /*
200    * x
201    *     (MulOp)
202    *     (Factor)
203    */
204
205    rde_param_i_state_push_value (<<state>>);
206    <<self>> <<ns>>sym_MulOp (<<state>>);
207    if (rde_param_i_seq_value2value(<<state>>)) return;
208    <<self>> <<ns>>sym_Factor (<<state>>);
209    rde_param_i_state_merge_value (<<state>>);
210    return;
211}
212
213/*
214 * value Symbol 'Factor'
215 */
216
217<<attributes>> void <<ns>>sym_Factor (<<STATE>> <<state>>) { <<prelude>>
218   /*
219    * x
220    *     (Term)
221    *     *
222    *         x
223    *             (AddOp)
224    *             (Term)
225    */
226
227    if (rde_param_i_symbol_start_d (<<state>>, 11)) return ;
228    <<self>> <<ns>>sequence_30 (<<state>>);
229    rde_param_i_symbol_done_d_reduce (<<state>>, 11, 10);
230    return;
231}
232
233<<attributes>> void <<ns>>sequence_30 (<<STATE>> <<state>>) { <<prelude>>
234   /*
235    * x
236    *     (Term)
237    *     *
238    *         x
239    *             (AddOp)
240    *             (Term)
241    */
242
243    rde_param_i_state_push_value (<<state>>);
244    <<self>> <<ns>>sym_Term (<<state>>);
245    if (rde_param_i_seq_value2value(<<state>>)) return;
246    <<self>> <<ns>>kleene_28 (<<state>>);
247    rde_param_i_state_merge_value (<<state>>);
248    return;
249}
250
251<<attributes>> void <<ns>>kleene_28 (<<STATE>> <<state>>) { <<prelude>>
252   /*
253    * *
254    *     x
255    *         (AddOp)
256    *         (Term)
257    */
258
259    while (1) {
260        rde_param_i_state_push_2 (<<state>>);
261        <<self>> <<ns>>sequence_26 (<<state>>);
262        if (rde_param_i_kleene_close(<<state>>)) return;
263    }
264    return;
265}
266
267<<attributes>> void <<ns>>sequence_26 (<<STATE>> <<state>>) { <<prelude>>
268   /*
269    * x
270    *     (AddOp)
271    *     (Term)
272    */
273
274    rde_param_i_state_push_value (<<state>>);
275    <<self>> <<ns>>sym_AddOp (<<state>>);
276    if (rde_param_i_seq_value2value(<<state>>)) return;
277    <<self>> <<ns>>sym_Term (<<state>>);
278    rde_param_i_state_merge_value (<<state>>);
279    return;
280}
281
282/*
283 * value Symbol 'MulOp'
284 */
285
286<<attributes>> void <<ns>>sym_MulOp (<<STATE>> <<state>>) { <<prelude>>
287   /*
288    * [*/]
289    */
290
291    if (rde_param_i_symbol_start (<<state>>, 14)) return ;
292    rde_param_i_next_class (<<state>>, "*/", 12);
293    rde_param_i_symbol_done_leaf (<<state>>, 14, 13);
294    return;
295}
296
297/*
298 * value Symbol 'Number'
299 */
300
301<<attributes>> void <<ns>>sym_Number (<<STATE>> <<state>>) { <<prelude>>
302   /*
303    * x
304    *     ?
305    *         (Sign)
306    *     +
307    *         (Digit)
308    */
309
310    if (rde_param_i_symbol_start_d (<<state>>, 16)) return ;
311    <<self>> <<ns>>sequence_41 (<<state>>);
312    rde_param_i_symbol_done_d_reduce (<<state>>, 16, 15);
313    return;
314}
315
316<<attributes>> void <<ns>>sequence_41 (<<STATE>> <<state>>) { <<prelude>>
317   /*
318    * x
319    *     ?
320    *         (Sign)
321    *     +
322    *         (Digit)
323    */
324
325    rde_param_i_state_push_value (<<state>>);
326    <<self>> <<ns>>optional_36 (<<state>>);
327    if (rde_param_i_seq_value2value(<<state>>)) return;
328    <<self>> <<ns>>poskleene_39 (<<state>>);
329    rde_param_i_state_merge_value (<<state>>);
330    return;
331}
332
333<<attributes>> void <<ns>>optional_36 (<<STATE>> <<state>>) { <<prelude>>
334   /*
335    * ?
336    *     (Sign)
337    */
338
339    rde_param_i_state_push_2 (<<state>>);
340    <<self>> <<ns>>sym_Sign (<<state>>);
341    rde_param_i_state_merge_ok (<<state>>);
342    return;
343}
344
345<<attributes>> void <<ns>>poskleene_39 (<<STATE>> <<state>>) { <<prelude>>
346   /*
347    * +
348    *     (Digit)
349    */
350
351    rde_param_i_loc_push (<<state>>);
352    <<self>> <<ns>>sym_Digit (<<state>>);
353    if (rde_param_i_kleene_abort(<<state>>)) return;
354    while (1) {
355        rde_param_i_state_push_2 (<<state>>);
356        <<self>> <<ns>>sym_Digit (<<state>>);
357        if (rde_param_i_kleene_close(<<state>>)) return;
358    }
359    return;
360}
361
362/*
363 * value Symbol 'Sign'
364 */
365
366<<attributes>> void <<ns>>sym_Sign (<<STATE>> <<state>>) { <<prelude>>
367   /*
368    * [-+]
369    */
370
371    if (rde_param_i_symbol_start (<<state>>, 18)) return ;
372    rde_param_i_next_class (<<state>>, "-+", 0);
373    rde_param_i_symbol_done_leaf (<<state>>, 18, 17);
374    return;
375}
376
377/*
378 * value Symbol 'Term'
379 */
380
381<<attributes>> void <<ns>>sym_Term (<<STATE>> <<state>>) { <<prelude>>
382   /*
383    * (Number)
384    */
385
386    if (rde_param_i_symbol_start_d (<<state>>, 20)) return ;
387    <<self>> <<ns>>sym_Number (<<state>>);
388    rde_param_i_symbol_done_d_reduce (<<state>>, 20, 19);
389    return;
390}
391
392/*
393 */
394