1## -*- tcl -*-
2##
3## Snit-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 snit
16package require pt::rde ; # Implementation of the PARAM
17			  # virtual machine underlying the
18			  # Tcl/PARAM code used below.
19
20# # ## ### ##### ######## ############# #####################
21##
22
23snit::type ::PARSER {
24    # # ## ### ##### ######## #############
25    ## Public API
26
27    constructor {} {
28	# Create the runtime supporting the parsing process.
29	set myparser [pt::rde ${selfns}::ENGINE]
30	return
31    }
32
33    method parse {channel} {
34	$myparser reset $channel
35	MAIN ; # Entrypoint for the generated code.
36	return [$myparser complete]
37    }
38
39    method parset {text} {
40	$myparser reset
41	$myparser data $text
42	MAIN ; # Entrypoint for the generated code.
43	return [$myparser complete]
44    }
45
46    # # ## ### ###### ######## #############
47    ## Configuration
48
49    pragma -hastypeinfo    0
50    pragma -hastypemethods 0
51    pragma -hasinfo        0
52    pragma -simpledispatch 1
53
54    # # ## ### ###### ######## #############
55    ## Data structures.
56
57    variable myparser {} ; # Our instantiation of the PARAM.
58
59    # # ## ### ###### ######## #############
60    ## BEGIN of GENERATED CODE. DO NOT EDIT.
61
62    #
63    # Grammar Start Expression
64    #
65
66    proc MAIN {} { upvar 1 myparser myparser
67        sym_Expression
68        return
69    }
70
71    #
72    # value Symbol 'AddOp'
73    #
74
75    proc sym_AddOp {} { upvar 1 myparser myparser
76        # [-+]
77
78        $myparser si:void_symbol_start AddOp
79        $myparser si:next_class -+
80        $myparser si:void_leaf_symbol_end AddOp
81        return
82    }
83
84    #
85    # value Symbol 'Digit'
86    #
87
88    proc sym_Digit {} { upvar 1 myparser myparser
89        # [0123456789]
90
91        $myparser si:void_symbol_start Digit
92        $myparser si:next_class 0123456789
93        $myparser si:void_leaf_symbol_end Digit
94        return
95    }
96
97    #
98    # value Symbol 'Expression'
99    #
100
101    proc sym_Expression {} { upvar 1 myparser myparser
102        # /
103        #     (Function)
104        #     x
105        #         '\('
106        #         (Expression)
107        #         '\)'
108        #     x
109        #         (Factor)
110        #         *
111        #             x
112        #                 (MulOp)
113        #                 (Factor)
114
115        $myparser si:value_symbol_start Expression
116        choice_21
117        $myparser si:reduce_symbol_end Expression
118        return
119    }
120
121    proc choice_21 {} { upvar 1 myparser myparser
122        # /
123        #     (Function)
124        #     x
125        #         '\('
126        #         (Expression)
127        #         '\)'
128        #     x
129        #         (Factor)
130        #         *
131        #             x
132        #                 (MulOp)
133        #                 (Factor)
134
135        $myparser si:value_state_push
136        sym_Function
137        $myparser si:valuevalue_branch
138        sequence_10
139        $myparser si:valuevalue_branch
140        sequence_19
141        $myparser si:value_state_merge
142        return
143    }
144
145    proc sequence_10 {} { upvar 1 myparser myparser
146        # x
147        #     '\('
148        #     (Expression)
149        #     '\)'
150
151        $myparser si:void_state_push
152        $myparser si:next_char \50
153        $myparser si:voidvalue_part
154        sym_Expression
155        $myparser si:valuevalue_part
156        $myparser si:next_char \51
157        $myparser si:value_state_merge
158        return
159    }
160
161    proc sequence_19 {} { upvar 1 myparser myparser
162        # x
163        #     (Factor)
164        #     *
165        #         x
166        #             (MulOp)
167        #             (Factor)
168
169        $myparser si:value_state_push
170        sym_Factor
171        $myparser si:valuevalue_part
172        kleene_17
173        $myparser si:value_state_merge
174        return
175    }
176
177    proc kleene_17 {} { upvar 1 myparser myparser
178        # *
179        #     x
180        #         (MulOp)
181        #         (Factor)
182
183        while {1} {
184            $myparser si:void2_state_push
185        sequence_15
186            $myparser si:kleene_close
187        }
188        return
189    }
190
191    proc sequence_15 {} { upvar 1 myparser myparser
192        # x
193        #     (MulOp)
194        #     (Factor)
195
196        $myparser si:value_state_push
197        sym_MulOp
198        $myparser si:valuevalue_part
199        sym_Factor
200        $myparser si:value_state_merge
201        return
202    }
203
204    #
205    # value Symbol 'Factor'
206    #
207
208    proc sym_Factor {} { upvar 1 myparser myparser
209        # x
210        #     (Term)
211        #     *
212        #         x
213        #             (AddOp)
214        #             (Term)
215
216        $myparser si:value_symbol_start Factor
217        sequence_31
218        $myparser si:reduce_symbol_end Factor
219        return
220    }
221
222    proc sequence_31 {} { upvar 1 myparser myparser
223        # x
224        #     (Term)
225        #     *
226        #         x
227        #             (AddOp)
228        #             (Term)
229
230        $myparser si:value_state_push
231        sym_Term
232        $myparser si:valuevalue_part
233        kleene_29
234        $myparser si:value_state_merge
235        return
236    }
237
238    proc kleene_29 {} { upvar 1 myparser myparser
239        # *
240        #     x
241        #         (AddOp)
242        #         (Term)
243
244        while {1} {
245            $myparser si:void2_state_push
246        sequence_27
247            $myparser si:kleene_close
248        }
249        return
250    }
251
252    proc sequence_27 {} { upvar 1 myparser myparser
253        # x
254        #     (AddOp)
255        #     (Term)
256
257        $myparser si:value_state_push
258        sym_AddOp
259        $myparser si:valuevalue_part
260        sym_Term
261        $myparser si:value_state_merge
262        return
263    }
264
265    #
266    # value Symbol 'Function'
267    #
268
269    proc sym_Function {} { upvar 1 myparser myparser
270        # (Sinus)
271
272        $myparser si:value_symbol_start Function
273        sym_Sinus
274        $myparser si:reduce_symbol_end Function
275        return
276    }
277
278    #
279    # value Symbol 'MulOp'
280    #
281
282    proc sym_MulOp {} { upvar 1 myparser myparser
283        # [*/]
284
285        $myparser si:void_symbol_start MulOp
286        $myparser si:next_class */
287        $myparser si:void_leaf_symbol_end MulOp
288        return
289    }
290
291    #
292    # value Symbol 'Number'
293    #
294
295    proc sym_Number {} { upvar 1 myparser myparser
296        # x
297        #     ?
298        #         (Sign)
299        #     +
300        #         (Digit)
301
302        $myparser si:value_symbol_start Number
303        sequence_44
304        $myparser si:reduce_symbol_end Number
305        return
306    }
307
308    proc sequence_44 {} { upvar 1 myparser myparser
309        # x
310        #     ?
311        #         (Sign)
312        #     +
313        #         (Digit)
314
315        $myparser si:value_state_push
316        optional_39
317        $myparser si:valuevalue_part
318        poskleene_42
319        $myparser si:value_state_merge
320        return
321    }
322
323    proc optional_39 {} { upvar 1 myparser myparser
324        # ?
325        #     (Sign)
326
327        $myparser si:void2_state_push
328        sym_Sign
329        $myparser si:void_state_merge_ok
330        return
331    }
332
333    proc poskleene_42 {} { upvar 1 myparser myparser
334        # +
335        #     (Digit)
336
337        $myparser i_loc_push
338        sym_Digit
339        $myparser si:kleene_abort
340        while {1} {
341            $myparser si:void2_state_push
342        sym_Digit
343            $myparser si:kleene_close
344        }
345        return
346    }
347
348    #
349    # value Symbol 'Sign'
350    #
351
352    proc sym_Sign {} { upvar 1 myparser myparser
353        # [-+]
354
355        $myparser si:void_symbol_start Sign
356        $myparser si:next_class -+
357        $myparser si:void_leaf_symbol_end Sign
358        return
359    }
360
361    #
362    # value Symbol 'Sinus'
363    #
364
365    proc sym_Sinus {} { upvar 1 myparser myparser
366        # x
367        #     "sin\("
368        #     (Expression)
369        #     '\)'
370
371        $myparser si:value_symbol_start Sinus
372        sequence_52
373        $myparser si:reduce_symbol_end Sinus
374        return
375    }
376
377    proc sequence_52 {} { upvar 1 myparser myparser
378        # x
379        #     "sin\("
380        #     (Expression)
381        #     '\)'
382
383        $myparser si:void_state_push
384        $myparser si:next_str sin\50
385        $myparser si:voidvalue_part
386        sym_Expression
387        $myparser si:valuevalue_part
388        $myparser si:next_char \51
389        $myparser si:value_state_merge
390        return
391    }
392
393    #
394    # value Symbol 'Term'
395    #
396
397    proc sym_Term {} { upvar 1 myparser myparser
398        # (Number)
399
400        $myparser si:value_symbol_start Term
401        sym_Number
402        $myparser si:reduce_symbol_end Term
403        return
404    }
405
406    ## END of GENERATED CODE. DO NOT EDIT.
407    # # ## ### ###### ######## #############
408}
409
410# # ## ### ##### ######## ############# #####################
411## Ready
412
413package provide SNIT_PACKAGE 1
414return
415