1[example {
2# -*- text -*-
3# Parsing Expression Grammar 'TEMPLATE'.
4# Generated for unknown, from file 'TEST'
5
6#
7# Grammar Start Expression
8#
9
10<<MAIN>>:
11         call              sym_Expression
12         halt
13
14#
15# value Symbol 'AddOp'
16#
17
18sym_AddOp:
19# /
20#     '-'
21#     '+'
22
23         symbol_restore    AddOp
24  found! jump              found_7
25         loc_push
26
27         call              choice_5
28
29   fail! value_clear
30     ok! value_leaf        AddOp
31         symbol_save       AddOp
32         error_nonterminal AddOp
33         loc_pop_discard
34
35found_7:
36     ok! ast_value_push
37         return
38
39choice_5:
40# /
41#     '-'
42#     '+'
43
44         error_clear
45
46         loc_push
47         error_push
48
49         input_next        "t -"
50     ok! test_char         "-"
51
52         error_pop_merge
53     ok! jump              oknoast_4
54
55         loc_pop_rewind
56         loc_push
57         error_push
58
59         input_next        "t +"
60     ok! test_char         "+"
61
62         error_pop_merge
63     ok! jump              oknoast_4
64
65         loc_pop_rewind
66         status_fail
67         return
68
69oknoast_4:
70         loc_pop_discard
71         return
72#
73# value Symbol 'Digit'
74#
75
76sym_Digit:
77# /
78#     '0'
79#     '1'
80#     '2'
81#     '3'
82#     '4'
83#     '5'
84#     '6'
85#     '7'
86#     '8'
87#     '9'
88
89         symbol_restore    Digit
90  found! jump              found_22
91         loc_push
92
93         call              choice_20
94
95   fail! value_clear
96     ok! value_leaf        Digit
97         symbol_save       Digit
98         error_nonterminal Digit
99         loc_pop_discard
100
101found_22:
102     ok! ast_value_push
103         return
104
105choice_20:
106# /
107#     '0'
108#     '1'
109#     '2'
110#     '3'
111#     '4'
112#     '5'
113#     '6'
114#     '7'
115#     '8'
116#     '9'
117
118         error_clear
119
120         loc_push
121         error_push
122
123         input_next        "t 0"
124     ok! test_char         "0"
125
126         error_pop_merge
127     ok! jump              oknoast_19
128
129         loc_pop_rewind
130         loc_push
131         error_push
132
133         input_next        "t 1"
134     ok! test_char         "1"
135
136         error_pop_merge
137     ok! jump              oknoast_19
138
139         loc_pop_rewind
140         loc_push
141         error_push
142
143         input_next        "t 2"
144     ok! test_char         "2"
145
146         error_pop_merge
147     ok! jump              oknoast_19
148
149         loc_pop_rewind
150         loc_push
151         error_push
152
153         input_next        "t 3"
154     ok! test_char         "3"
155
156         error_pop_merge
157     ok! jump              oknoast_19
158
159         loc_pop_rewind
160         loc_push
161         error_push
162
163         input_next        "t 4"
164     ok! test_char         "4"
165
166         error_pop_merge
167     ok! jump              oknoast_19
168
169         loc_pop_rewind
170         loc_push
171         error_push
172
173         input_next        "t 5"
174     ok! test_char         "5"
175
176         error_pop_merge
177     ok! jump              oknoast_19
178
179         loc_pop_rewind
180         loc_push
181         error_push
182
183         input_next        "t 6"
184     ok! test_char         "6"
185
186         error_pop_merge
187     ok! jump              oknoast_19
188
189         loc_pop_rewind
190         loc_push
191         error_push
192
193         input_next        "t 7"
194     ok! test_char         "7"
195
196         error_pop_merge
197     ok! jump              oknoast_19
198
199         loc_pop_rewind
200         loc_push
201         error_push
202
203         input_next        "t 8"
204     ok! test_char         "8"
205
206         error_pop_merge
207     ok! jump              oknoast_19
208
209         loc_pop_rewind
210         loc_push
211         error_push
212
213         input_next        "t 9"
214     ok! test_char         "9"
215
216         error_pop_merge
217     ok! jump              oknoast_19
218
219         loc_pop_rewind
220         status_fail
221         return
222
223oknoast_19:
224         loc_pop_discard
225         return
226#
227# value Symbol 'Expression'
228#
229
230sym_Expression:
231# /
232#     x
233#         '\('
234#         (Expression)
235#         '\)'
236#     x
237#         (Factor)
238#         *
239#             x
240#                 (MulOp)
241#                 (Factor)
242
243         symbol_restore    Expression
244  found! jump              found_46
245         loc_push
246         ast_push
247
248         call              choice_44
249
250   fail! value_clear
251     ok! value_reduce      Expression
252         symbol_save       Expression
253         error_nonterminal Expression
254         ast_pop_rewind
255         loc_pop_discard
256
257found_46:
258     ok! ast_value_push
259         return
260
261choice_44:
262# /
263#     x
264#         '\('
265#         (Expression)
266#         '\)'
267#     x
268#         (Factor)
269#         *
270#             x
271#                 (MulOp)
272#                 (Factor)
273
274         error_clear
275
276         ast_push
277         loc_push
278         error_push
279
280         call              sequence_27
281
282         error_pop_merge
283     ok! jump              ok_43
284
285         ast_pop_rewind
286         loc_pop_rewind
287         ast_push
288         loc_push
289         error_push
290
291         call              sequence_40
292
293         error_pop_merge
294     ok! jump              ok_43
295
296         ast_pop_rewind
297         loc_pop_rewind
298         status_fail
299         return
300
301ok_43:
302         ast_pop_discard
303         loc_pop_discard
304         return
305
306sequence_27:
307# x
308#     '\('
309#     (Expression)
310#     '\)'
311
312         loc_push
313         error_clear
314
315         error_push
316
317         input_next        "t ("
318     ok! test_char         "("
319
320         error_pop_merge
321   fail! jump              failednoast_29
322         ast_push
323         error_push
324
325         call              sym_Expression
326
327         error_pop_merge
328   fail! jump              failed_28
329         error_push
330
331         input_next        "t )"
332     ok! test_char         ")"
333
334         error_pop_merge
335   fail! jump              failed_28
336
337         ast_pop_discard
338         loc_pop_discard
339         return
340
341failed_28:
342         ast_pop_rewind
343
344failednoast_29:
345         loc_pop_rewind
346         return
347
348sequence_40:
349# x
350#     (Factor)
351#     *
352#         x
353#             (MulOp)
354#             (Factor)
355
356         ast_push
357         loc_push
358         error_clear
359
360         error_push
361
362         call              sym_Factor
363
364         error_pop_merge
365   fail! jump              failed_41
366         error_push
367
368         call              kleene_37
369
370         error_pop_merge
371   fail! jump              failed_41
372
373         ast_pop_discard
374         loc_pop_discard
375         return
376
377failed_41:
378         ast_pop_rewind
379         loc_pop_rewind
380         return
381
382kleene_37:
383# *
384#     x
385#         (MulOp)
386#         (Factor)
387
388         loc_push
389         error_push
390
391         call              sequence_34
392
393         error_pop_merge
394   fail! jump              failed_38
395         loc_pop_discard
396         jump              kleene_37
397
398failed_38:
399         loc_pop_rewind
400         status_ok
401         return
402
403sequence_34:
404# x
405#     (MulOp)
406#     (Factor)
407
408         ast_push
409         loc_push
410         error_clear
411
412         error_push
413
414         call              sym_MulOp
415
416         error_pop_merge
417   fail! jump              failed_35
418         error_push
419
420         call              sym_Factor
421
422         error_pop_merge
423   fail! jump              failed_35
424
425         ast_pop_discard
426         loc_pop_discard
427         return
428
429failed_35:
430         ast_pop_rewind
431         loc_pop_rewind
432         return
433#
434# value Symbol 'Factor'
435#
436
437sym_Factor:
438# x
439#     (Term)
440#     *
441#         x
442#             (AddOp)
443#             (Term)
444
445         symbol_restore    Factor
446  found! jump              found_60
447         loc_push
448         ast_push
449
450         call              sequence_57
451
452   fail! value_clear
453     ok! value_reduce      Factor
454         symbol_save       Factor
455         error_nonterminal Factor
456         ast_pop_rewind
457         loc_pop_discard
458
459found_60:
460     ok! ast_value_push
461         return
462
463sequence_57:
464# x
465#     (Term)
466#     *
467#         x
468#             (AddOp)
469#             (Term)
470
471         ast_push
472         loc_push
473         error_clear
474
475         error_push
476
477         call              sym_Term
478
479         error_pop_merge
480   fail! jump              failed_58
481         error_push
482
483         call              kleene_54
484
485         error_pop_merge
486   fail! jump              failed_58
487
488         ast_pop_discard
489         loc_pop_discard
490         return
491
492failed_58:
493         ast_pop_rewind
494         loc_pop_rewind
495         return
496
497kleene_54:
498# *
499#     x
500#         (AddOp)
501#         (Term)
502
503         loc_push
504         error_push
505
506         call              sequence_51
507
508         error_pop_merge
509   fail! jump              failed_55
510         loc_pop_discard
511         jump              kleene_54
512
513failed_55:
514         loc_pop_rewind
515         status_ok
516         return
517
518sequence_51:
519# x
520#     (AddOp)
521#     (Term)
522
523         ast_push
524         loc_push
525         error_clear
526
527         error_push
528
529         call              sym_AddOp
530
531         error_pop_merge
532   fail! jump              failed_52
533         error_push
534
535         call              sym_Term
536
537         error_pop_merge
538   fail! jump              failed_52
539
540         ast_pop_discard
541         loc_pop_discard
542         return
543
544failed_52:
545         ast_pop_rewind
546         loc_pop_rewind
547         return
548#
549# value Symbol 'MulOp'
550#
551
552sym_MulOp:
553# /
554#     '*'
555#     '/'
556
557         symbol_restore    MulOp
558  found! jump              found_67
559         loc_push
560
561         call              choice_65
562
563   fail! value_clear
564     ok! value_leaf        MulOp
565         symbol_save       MulOp
566         error_nonterminal MulOp
567         loc_pop_discard
568
569found_67:
570     ok! ast_value_push
571         return
572
573choice_65:
574# /
575#     '*'
576#     '/'
577
578         error_clear
579
580         loc_push
581         error_push
582
583         input_next        "t *"
584     ok! test_char         "*"
585
586         error_pop_merge
587     ok! jump              oknoast_64
588
589         loc_pop_rewind
590         loc_push
591         error_push
592
593         input_next        "t /"
594     ok! test_char         "/"
595
596         error_pop_merge
597     ok! jump              oknoast_64
598
599         loc_pop_rewind
600         status_fail
601         return
602
603oknoast_64:
604         loc_pop_discard
605         return
606#
607# value Symbol 'Number'
608#
609
610sym_Number:
611# x
612#     ?
613#         (Sign)
614#     +
615#         (Digit)
616
617         symbol_restore    Number
618  found! jump              found_80
619         loc_push
620         ast_push
621
622         call              sequence_77
623
624   fail! value_clear
625     ok! value_reduce      Number
626         symbol_save       Number
627         error_nonterminal Number
628         ast_pop_rewind
629         loc_pop_discard
630
631found_80:
632     ok! ast_value_push
633         return
634
635sequence_77:
636# x
637#     ?
638#         (Sign)
639#     +
640#         (Digit)
641
642         ast_push
643         loc_push
644         error_clear
645
646         error_push
647
648         call              optional_70
649
650         error_pop_merge
651   fail! jump              failed_78
652         error_push
653
654         call              poskleene_73
655
656         error_pop_merge
657   fail! jump              failed_78
658
659         ast_pop_discard
660         loc_pop_discard
661         return
662
663failed_78:
664         ast_pop_rewind
665         loc_pop_rewind
666         return
667
668optional_70:
669# ?
670#     (Sign)
671
672         loc_push
673         error_push
674
675         call              sym_Sign
676
677         error_pop_merge
678   fail! loc_pop_rewind
679     ok! loc_pop_discard
680         status_ok
681         return
682
683poskleene_73:
684# +
685#     (Digit)
686
687         loc_push
688
689         call              sym_Digit
690
691   fail! jump              failed_74
692
693loop_75:
694         loc_pop_discard
695         loc_push
696         error_push
697
698         call              sym_Digit
699
700         error_pop_merge
701     ok! jump              loop_75
702         status_ok
703
704failed_74:
705         loc_pop_rewind
706         return
707#
708# value Symbol 'Sign'
709#
710
711sym_Sign:
712# /
713#     '-'
714#     '+'
715
716         symbol_restore    Sign
717  found! jump              found_86
718         loc_push
719
720         call              choice_5
721
722   fail! value_clear
723     ok! value_leaf        Sign
724         symbol_save       Sign
725         error_nonterminal Sign
726         loc_pop_discard
727
728found_86:
729     ok! ast_value_push
730         return
731#
732# value Symbol 'Term'
733#
734
735sym_Term:
736# (Number)
737
738         symbol_restore    Term
739  found! jump              found_89
740         loc_push
741         ast_push
742
743         call              sym_Number
744
745   fail! value_clear
746     ok! value_reduce      Term
747         symbol_save       Term
748         error_nonterminal Term
749         ast_pop_rewind
750         loc_pop_discard
751
752found_89:
753     ok! ast_value_push
754         return
755
756#
757#
758}]
759