1## -*- tcl -*-
2##
3## NX-based Tcl/PARAM implementation of the parsing
4## expression grammar
5##
6##	TEMPLATE
7##
8## Generated from file	TEST
9##            for user  unknown
10##
11# # ## ### ##### ######## ############# #####################
12## Requirements
13
14package require Tcl 8.5
15package require nx
16package require pt::rde::nx ; # NX-based implementation of the
17			      # PARAM virtual machine
18			      # underlying the Tcl/PARAM code
19			      # used below.
20
21# # ## ### ##### ######## ############# #####################
22##
23
24nx::Class create PARSER -superclasses pt::rde::nx {
25    # # ## ### ##### ######## #############
26    ## Public API
27
28    :public method parse {channel} {
29	:reset $channel
30	:MAIN ; # Entrypoint for the generated code.
31	return [:complete]
32    }
33
34    :public method parset {text} {
35	:reset {}
36	:data $text
37	:MAIN ; # Entrypoint for the generated code.
38	return [:complete]
39    }
40
41    # # ## ### ###### ######## #############
42    ## BEGIN of GENERATED CODE. DO NOT EDIT.
43
44    #
45    # Grammar Start Expression
46    #
47
48    :method MAIN {} {
49        : sym_Expression
50        return
51    }
52
53    #
54    # value Symbol 'AddOp'
55    #
56
57    :method sym_AddOp {} {
58        # [-+]
59
60        : si:void_symbol_start AddOp
61        : si:next_class -+
62        : si:void_leaf_symbol_end AddOp
63        return
64    }
65
66    #
67    # value Symbol 'Digit'
68    #
69
70    :method sym_Digit {} {
71        # [0123456789]
72
73        : si:void_symbol_start Digit
74        : si:next_class 0123456789
75        : si:void_leaf_symbol_end Digit
76        return
77    }
78
79    #
80    # value Symbol 'Expression'
81    #
82
83    :method sym_Expression {} {
84        # /
85        #     x
86        #         '\('
87        #         (Expression)
88        #         '\)'
89        #     x
90        #         (Factor)
91        #         *
92        #             x
93        #                 (MulOp)
94        #                 (Factor)
95
96        : si:value_symbol_start Expression
97        : choice_20
98        : si:reduce_symbol_end Expression
99        return
100    }
101
102    :method choice_20 {} {
103        # /
104        #     x
105        #         '\('
106        #         (Expression)
107        #         '\)'
108        #     x
109        #         (Factor)
110        #         *
111        #             x
112        #                 (MulOp)
113        #                 (Factor)
114
115        : si:value_state_push
116        : sequence_9
117        : si:valuevalue_branch
118        : sequence_18
119        : si:value_state_merge
120        return
121    }
122
123    :method sequence_9 {} {
124        # x
125        #     '\('
126        #     (Expression)
127        #     '\)'
128
129        : si:void_state_push
130        : si:next_char \50
131        : si:voidvalue_part
132        : sym_Expression
133        : si:valuevalue_part
134        : si:next_char \51
135        : si:value_state_merge
136        return
137    }
138
139    :method sequence_18 {} {
140        # x
141        #     (Factor)
142        #     *
143        #         x
144        #             (MulOp)
145        #             (Factor)
146
147        : si:value_state_push
148        : sym_Factor
149        : si:valuevalue_part
150        : kleene_16
151        : si:value_state_merge
152        return
153    }
154
155    :method kleene_16 {} {
156        # *
157        #     x
158        #         (MulOp)
159        #         (Factor)
160
161        while {1} {
162            : si:void2_state_push
163        : sequence_14
164            : si:kleene_close
165        }
166        return
167    }
168
169    :method sequence_14 {} {
170        # x
171        #     (MulOp)
172        #     (Factor)
173
174        : si:value_state_push
175        : sym_MulOp
176        : si:valuevalue_part
177        : sym_Factor
178        : si:value_state_merge
179        return
180    }
181
182    #
183    # value Symbol 'Factor'
184    #
185
186    :method sym_Factor {} {
187        # x
188        #     (Term)
189        #     *
190        #         x
191        #             (AddOp)
192        #             (Term)
193
194        : si:value_symbol_start Factor
195        : sequence_30
196        : si:reduce_symbol_end Factor
197        return
198    }
199
200    :method sequence_30 {} {
201        # x
202        #     (Term)
203        #     *
204        #         x
205        #             (AddOp)
206        #             (Term)
207
208        : si:value_state_push
209        : sym_Term
210        : si:valuevalue_part
211        : kleene_28
212        : si:value_state_merge
213        return
214    }
215
216    :method kleene_28 {} {
217        # *
218        #     x
219        #         (AddOp)
220        #         (Term)
221
222        while {1} {
223            : si:void2_state_push
224        : sequence_26
225            : si:kleene_close
226        }
227        return
228    }
229
230    :method sequence_26 {} {
231        # x
232        #     (AddOp)
233        #     (Term)
234
235        : si:value_state_push
236        : sym_AddOp
237        : si:valuevalue_part
238        : sym_Term
239        : si:value_state_merge
240        return
241    }
242
243    #
244    # value Symbol 'MulOp'
245    #
246
247    :method sym_MulOp {} {
248        # [*/]
249
250        : si:void_symbol_start MulOp
251        : si:next_class */
252        : si:void_leaf_symbol_end MulOp
253        return
254    }
255
256    #
257    # value Symbol 'Number'
258    #
259
260    :method sym_Number {} {
261        # x
262        #     ?
263        #         (Sign)
264        #     +
265        #         (Digit)
266
267        : si:value_symbol_start Number
268        : sequence_41
269        : si:reduce_symbol_end Number
270        return
271    }
272
273    :method sequence_41 {} {
274        # x
275        #     ?
276        #         (Sign)
277        #     +
278        #         (Digit)
279
280        : si:value_state_push
281        : optional_36
282        : si:valuevalue_part
283        : poskleene_39
284        : si:value_state_merge
285        return
286    }
287
288    :method optional_36 {} {
289        # ?
290        #     (Sign)
291
292        : si:void2_state_push
293        : sym_Sign
294        : si:void_state_merge_ok
295        return
296    }
297
298    :method poskleene_39 {} {
299        # +
300        #     (Digit)
301
302        : i_loc_push
303        : sym_Digit
304        : si:kleene_abort
305        while {1} {
306            : si:void2_state_push
307        : sym_Digit
308            : si:kleene_close
309        }
310        return
311    }
312
313    #
314    # value Symbol 'Sign'
315    #
316
317    :method sym_Sign {} {
318        # [-+]
319
320        : si:void_symbol_start Sign
321        : si:next_class -+
322        : si:void_leaf_symbol_end Sign
323        return
324    }
325
326    #
327    # value Symbol 'Term'
328    #
329
330    :method sym_Term {} {
331        # (Number)
332
333        : si:value_symbol_start Term
334        : sym_Number
335        : si:reduce_symbol_end Term
336        return
337    }
338
339    ## END of GENERATED CODE. DO NOT EDIT.
340    # # ## ### ###### ######## #############
341}
342
343# # ## ### ##### ######## ############# #####################
344## Ready
345
346package provide NX_PACKAGE 1
347return
348