1pt::rde(n)                       Parser Tools                       pt::rde(n)
2
3
4
5______________________________________________________________________________
6

NAME

8       pt::rde - Parsing Runtime Support, PARAM based
9

SYNOPSIS

11       package require Tcl  8.5
12
13       package require pt::rde  ?1.1?
14
15       package require snit
16
17       package require struct::stack  1.5
18
19       package require pt::ast  1.1
20
21       ::pt::rde objectName
22
23       objectName destroy
24
25       objectName reset chan
26
27       objectName complete
28
29       objectName chan
30
31       objectName line
32
33       objectName column
34
35       objectName current
36
37       objectName location
38
39       objectName locations
40
41       objectName ok
42
43       objectName value
44
45       objectName error
46
47       objectName errors
48
49       objectName tokens ?from ?to??
50
51       objectName symbols
52
53       objectName known
54
55       objectName reducible
56
57       objectName asts
58
59       objectName ast
60
61       objectName position loc
62
63       objectName i_input_next msg
64
65       objectName i_test_alnum
66
67       objectName i_test_alpha
68
69       objectName i_test_ascii
70
71       objectName i_test_char char
72
73       objectName i_test_ddigit
74
75       objectName i_test_digit
76
77       objectName i_test_graph
78
79       objectName i_test_lower
80
81       objectName i_test_print
82
83       objectName i_test_punct
84
85       objectName i_test_range chars chare
86
87       objectName i_test_space
88
89       objectName i_test_upper
90
91       objectName i_test_wordchar
92
93       objectName i_test_xdigit
94
95       objectName i_error_clear
96
97       objectName i_error_push
98
99       objectName i_error_pop_merge
100
101       objectName i_error_nonterminal symbol
102
103       objectName i_status_ok
104
105       objectName i_status_fail
106
107       objectName i_status_negate
108
109       objectName i_loc_push
110
111       objectName i_loc_pop_discard
112
113       objectName i_loc_pop_rewind
114
115       objectName i:ok_loc_pop_rewind
116
117       objectName i_loc_pop_rewind/discard
118
119       objectName i_symbol_restore symbol
120
121       objectName i_symbol_save symbol
122
123       objectName i_value_clear
124
125       objectName i_value_clear/leaf
126
127       objectName i_value_clear/reduce
128
129       objectName i:ok_ast_value_push
130
131       objectName i_ast_push
132
133       objectName i_ast_pop_rewind
134
135       objectName i:fail_ast_pop_rewind
136
137       objectName i_ast_pop_rewind/discard
138
139       objectName i_ast_pop_discard
140
141       objectName i_ast_pop_discard/rewind
142
143       objectName i:ok_continue
144
145       objectName i:fail_continue
146
147       objectName i:fail_return
148
149       objectName i:ok_return
150
151       objectName si:void_state_push
152
153       objectName si:void2_state_push
154
155       objectName si:value_state_push
156
157       objectName si:void_state_merge
158
159       objectName si:void_state_merge_ok
160
161       objectName si:value_state_merge
162
163       objectName si:value_notahead_start
164
165       objectName si:void_notahead_exit
166
167       objectName si:value_notahead_exit
168
169       objectName si:kleene_abort
170
171       objectName si:kleene_close
172
173       objectName si:voidvoid_branch
174
175       objectName si:voidvalue_branch
176
177       objectName si:valuevoid_branch
178
179       objectName si:valuevalue_branch
180
181       objectName si:voidvoid_part
182
183       objectName si:voidvalue_part
184
185       objectName si:valuevalue_part
186
187       objectName si:value_symbol_start symbol
188
189       objectName si:value_void_symbol_start symbol
190
191       objectName si:void_symbol_start symbol
192
193       objectName si:void_void_symbol_start symbol
194
195       objectName si:reduce_symbol_end symbol
196
197       objectName si:void_leaf_symbol_end symbol
198
199       objectName si:value_leaf_symbol_end symbol
200
201       objectName si:value_clear_symbol_end symbol
202
203       objectName si:void_clear_symbol_end symbol
204
205       objectName si:next_char tok
206
207       objectName si:next_range toks toke
208
209       objectName si:next_alnum
210
211       objectName si:next_alpha
212
213       objectName si:next_ascii
214
215       objectName si:next_ddigit
216
217       objectName si:next_digit
218
219       objectName si:next_graph
220
221       objectName si:next_lower
222
223       objectName si:next_print
224
225       objectName si:next_punct
226
227       objectName si:next_space
228
229       objectName si:next_upper
230
231       objectName si:next_wordchar
232
233       objectName si:next_xdigit
234
235______________________________________________________________________________
236

DESCRIPTION

238       Are  you  lost ?  Do you have trouble understanding this document ?  In
239       that case please read the overview  provided  by  the  Introduction  to
240       Parser  Tools.  This document is the entrypoint to the whole system the
241       current package is a part of.
242
243       This package provides a class whose instances provide the runtime  sup‐
244       port  for recursive descent parsers with backtracking, as is needed for
245       the execution of, for example, parsing expression grammars.  It  imple‐
246       ments  the  PackRat  Machine  Specification,  as  such that document is
247       required reading to understand  both  this  manpage,  and  the  package
248       itself.  The  description below does make numerous shorthand references
249       to the PARAM's instructions and the various parts of its  architectural
250       state.
251
252       The  package  resides  in  the  Execution  section of the Core Layer of
253       Parser Tools.
254
255       IMAGE: arch_core_transform
256
257       Note: This package not only has the standard  Tcl  implementation,  but
258       also an accelerator, i.e. a C implementation, based on Critcl.
259
260   CLASS API
261       The package exports the API described here.
262
263       ::pt::rde objectName
264              The command creates a new runtime object for a recursive descent
265              parser with backtracking and returns the fully qualified name of
266              the object command as its result. The API of this object command
267              is described in the section Object API. It may be used to invoke
268              various operations on the object.
269
270   OBJECT API
271       All  objects  created  by this package provide the following 63 methods
272       for the manipulation and querying of their state, which is, in  essence
273       the architectural state of a PARAM.
274
275       First some general methods and the state accessors.
276
277       objectName destroy
278              This  method  destroys the object, releasing all claimed memory,
279              and deleting the associated object command.
280
281       objectName reset chan
282              This method resets the state of the runtme to its defaults, pre‐
283              paring  it for the parsing of the character in the channel chan,
284              which becomes IN.
285
286              Note here that the Parser Tools are based on Tcl 8.5+. In  other
287              words, the channel argument is not restricted to files, sockets,
288              etc. We have the full power of reflected channels available.
289
290              It should also be noted that the  parser  pulls  the  characters
291              from  the  input stream as it needs them. If a parser created by
292              this package has to be operated in a push aka event-driven  man‐
293              ner  it  will  be necessary to go to Tcl 8.6+ and use the corou‐
294              tine::auto to wrap it into a coroutine where  read  is  properly
295              changed for push-operation.
296
297       objectName complete
298              This  method  completes  parsing,  either returning the AST made
299              from the elements of ARS, or throwing an  error  containing  the
300              current ER.
301
302       objectName chan
303              This method returns the handle of the channel which is IN.
304
305       objectName line
306              This  method returns the line number for the position IN is cur‐
307              rently at. Note that this may not match with the line number for
308              CL, due to backtracking.
309
310       objectName column
311              This  method returns the column for the position IN is currently
312              at. Note that this may not match with the column for CL, due  to
313              backtracking.
314
315       objectName current
316              This method returns CC.
317
318       objectName location
319              This method returns CL.
320
321       objectName locations
322              This  method returns the LS. The topmost entry of the stack will
323              be the first element of the returned list.
324
325       objectName ok
326              This method returns ST.
327
328       objectName value
329              This method returns SV.
330
331       objectName error
332              This method returns ER. This is either the empty string  for  an
333              empty  ER,  or  a  list of 2 elements, the location the error is
334              for, and a set of messages  which  specify  which  symbols  were
335              expected at the location. The messages are encoded as one of the
336              possible atomic parsing expressions (special  operators,  termi‐
337              nal, range, and nonterminal operator).
338
339       objectName errors
340              This  method  returns ES. The topmost entry of the stack will be
341              the first element of the returned list. Each entry is encoded as
342              described for error.
343
344       objectName tokens ?from ?to??
345              This method returns the part of TC for the range of locations of
346              IN starting at from and ending at to. If to is not specified  it
347              is  taken as identical to from. If neither argument is specified
348              the whole of TC is returned.
349
350              Each token in the returned list is  a  list  of  three  elements
351              itself,  containing the character at the location, and the asso‐
352              ciated line and column numbers, in this order.
353
354       objectName symbols
355              This method returns a dictionary containing NC.  Keys  are  two-
356              element  lists  containing  nonterminal  symbol and location, in
357              this order. The values are 4-tuples containing CL, ST,  ER,  and
358              SV,  in  this  order.  ER is encoded as specified for the method
359              error.
360
361       objectName known
362              This method returns a list containing the keys of SC.  They  are
363              encoded in the same manner as is done by method symbols.
364
365       objectName reducible
366              This  method returns ARS. The topmost entry of the stack will be
367              the first element of the returned list
368
369       objectName asts
370              This method returns AS. The topmost entry of the stack  will  be
371              the first element of the returned list
372
373       objectName ast
374              This  is  a  convenience method returning the topmost element of
375              ARS.
376
377       objectName position loc
378              This method returns the line and column numbers for  the  speci‐
379              fied  location  of  IN,  assuming that this location has already
380              been reached during the parsing process.
381
382       The following methods implement all PARAM instructions. They  all  have
383       the prefix "i_".
384
385       The control flow is mainly provided by Tcl's builtin commands, like if,
386       while, etc., plus a few guarded variants of PARAM instructions and  Tcl
387       commands..  That  means that these instruction variants will do nothing
388       if their guard condition is not fulfilled. They can  be  recognized  by
389       the prefix "i:ok_" and "i:fail_", which denote the value ST has to have
390       for the instruction to execute.
391
392       The instructions are listed in the same order they occur in the PackRat
393       Machine Specification, with the guard variants listed after their regu‐
394       lar implementation, if any, or in their place.
395
396       objectName i_input_next msg
397              This method implements the PARAM instruction input_next.
398
399       objectName i_test_alnum
400              This method implements the PARAM instruction test_alnum.
401
402       objectName i_test_alpha
403              This method implements the PARAM instruction test_alpha.
404
405       objectName i_test_ascii
406              This method implements the PARAM instruction test_ascii.
407
408       objectName i_test_char char
409              This method implements the PARAM instruction test_char.
410
411       objectName i_test_ddigit
412              This method implements the PARAM instruction test_ddigit.
413
414       objectName i_test_digit
415              This method implements the PARAM instruction test_digit.
416
417       objectName i_test_graph
418              This method implements the PARAM instruction test_graph.
419
420       objectName i_test_lower
421              This method implements the PARAM instruction test_lower.
422
423       objectName i_test_print
424              This method implements the PARAM instruction test_print.
425
426       objectName i_test_punct
427              This method implements the PARAM instruction test_punct.
428
429       objectName i_test_range chars chare
430              This method implements the PARAM instruction test_range.
431
432       objectName i_test_space
433              This method implements the PARAM instruction test_space.
434
435       objectName i_test_upper
436              This method implements the PARAM instruction test_upper.
437
438       objectName i_test_wordchar
439              This method implements the PARAM instruction test_wordchar.
440
441       objectName i_test_xdigit
442              This method implements the PARAM instruction test_xdigit.
443
444       objectName i_error_clear
445              This method implements the PARAM instruction error_clear.
446
447       objectName i_error_push
448              This method implements the PARAM instruction error_push.
449
450       objectName i_error_pop_merge
451              This method implements the PARAM instruction error_pop_merge.
452
453       objectName i_error_nonterminal symbol
454              This method implements the PARAM instruction error_nonterminal.
455
456       objectName i_status_ok
457              This method implements the PARAM instruction status_ok.
458
459       objectName i_status_fail
460              This method implements the PARAM instruction status_fail.
461
462       objectName i_status_negate
463              This method implements the PARAM instruction status_negate.
464
465       objectName i_loc_push
466              This method implements the PARAM instruction loc_push.
467
468       objectName i_loc_pop_discard
469              This method implements the PARAM instruction loc_pop_discard.
470
471       objectName i_loc_pop_rewind
472              This method implements the PARAM instruction loc_pop_rewind.
473
474       objectName i:ok_loc_pop_rewind
475              This guarded method, a  variant  of  i_loc_pop_rewind,  executes
476              only for "ST == ok".
477
478       objectName i_loc_pop_rewind/discard
479              This  method is a convenient combination of control flow and the
480              two PARAM instructions loc_pop_rewind and  loc_pop_discard.  The
481              former is executed for "ST == fail", the latter for "ST == ok".
482
483       objectName i_symbol_restore symbol
484              This method implements the PARAM instruction symbol_restore.
485
486              The boolean result of the check is returned as the result of the
487              method and can be used with standard Tcl control flow commands.
488
489       objectName i_symbol_save symbol
490              This method implements the PARAM instruction symbol_save.
491
492       objectName i_value_clear
493              This method implements the PARAM instruction value_clear.
494
495       objectName i_value_clear/leaf
496              This method is a convenient combination of control flow and  the
497              two PARAM instructions value_clear and value_leaf. The former is
498              executed for "ST == fail", the latter for "ST == ok".
499
500       objectName i_value_clear/reduce
501              This method is a convenient combination of control flow and  the
502              two  PARAM instructions value_clear and value_reduce. The former
503              is executed for "ST == fail", the latter for "ST == ok".
504
505       objectName i:ok_ast_value_push
506              This method implements  a  guarded  variant  of  the  the  PARAM
507              instruction ast_value_push, which executes only for "ST == ok".
508
509       objectName i_ast_push
510              This method implements the PARAM instruction ast_push.
511
512       objectName i_ast_pop_rewind
513              This method implements the PARAM instruction ast_pop_rewind.
514
515       objectName i:fail_ast_pop_rewind
516              This  guarded  method,  a  variant of i_ast_pop_rewind, executes
517              only for "ST == fail".
518
519       objectName i_ast_pop_rewind/discard
520              This method is a convenient combination of control flow and  the
521              two  PARAM  instructions ast_pop_rewind and ast_pop_discard. The
522              former is executed for "ST == fail", the latter for "ST == ok".
523
524       objectName i_ast_pop_discard
525              This method implements the PARAM instruction ast_pop_discard.
526
527       objectName i_ast_pop_discard/rewind
528              This method is a convenient combination of control flow and  the
529              two  PARAM  instructions ast_pop_discard and ast_pop_rewind. The
530              former is executed for "ST == fail", the latter for "ST == ok".
531
532       objectName i:ok_continue
533              This guarded method executes only for "ST == ok". Then it aborts
534              the  current  iteration of the innermost loop in the calling Tcl
535              procedure.
536
537       objectName i:fail_continue
538              This guarded method executes only for  "ST  ==  fail".  Then  it
539              aborts  the current iteration of the innermost loop in the call‐
540              ing Tcl procedure.
541
542       objectName i:fail_return
543              This guarded method executes only for  "ST  ==  fail".  Then  it
544              aborts the calling Tcl procedure.
545
546       objectName i:ok_return
547              This guarded method executes only for "ST == ok". Then it aborts
548              the calling Tcl procedure.
549
550       The next set of methods  are  super  instructions,  meaning  that  each
551       implements  a longer sequence of instructions commonly used in parsers.
552       The combinated instructions of the previous set, i.e. those with  names
553       matching  the pattern "i_*/*", are actually super instructions as well,
554       albeit with limited scope, handling 2 instructions with  their  control
555       flow. The upcoming set is much broader in scope, folding as much as six
556       or more PARAM instructions into a single method call.
557
558       In this we can see the reasoning behind their use well:
559
560       [1]    By using less instructions the generated parsers become smaller,
561              as  the  common  parts are now truly part of the common runtime,
562              and not explicitly written in the parser's code  over  and  over
563              again.
564
565       [2]    Using  less instructions additionally reduces the overhead asso‐
566              ciated with calls into the runtime, i.e. the cost of method dis‐
567              patch and of setting up the variable context.
568
569       [3]    Another effect of the super instructions is that their internals
570              can be optimized as well, especially regarding control flow, and
571              stack  use,  as  the  runtime  internals  are  accessible to all
572              instructions folded into the sequence.
573
574       objectName si:void_state_push
575              This method combines
576
577
578              i_loc_push
579              i_error_clear
580              i_error_push
581
582
583              Parsers use it at the beginning of void  sequences  and  choices
584              with a void initial branch.
585
586       objectName si:void2_state_push
587              This method combines
588
589
590              i_loc_push
591              i_error_clear
592              i_error_push
593
594
595              Parsers use it at the beginning of optional and repeated expres‐
596              sions.
597
598       objectName si:value_state_push
599              This method combines
600
601
602              i_ast_push
603              i_loc_push
604              i_error_clear
605              i_error_push
606
607
608              Parsers use it at the beginning of sequences generating  an  AST
609              and choices with an initial branch generating an AST.
610
611       objectName si:void_state_merge
612              This method combines
613
614
615              i_error_pop_merge
616              i_loc_pop_rewind/discard
617
618
619              Parsers  use  it  at the end of void sequences and choices whose
620              last branch is void.
621
622       objectName si:void_state_merge_ok
623              This method combines
624
625
626              i_error_pop_merge
627              i_loc_pop_rewind/discard
628              i_status_ok
629
630
631              Parsers use it at the end of optional expressions
632
633       objectName si:value_state_merge
634              This method combines
635
636
637              i_error_pop_merge
638              i_ast_pop_rewind/discard
639              i_loc_pop_rewind/discard
640
641
642              Parsers use it at the  end  of  sequences  generating  ASTs  and
643              choices whose last branch generates an AST
644
645       objectName si:value_notahead_start
646              This method combines
647
648
649              i_loc_push
650              i_ast_push
651
652
653              Parsers use it at the beginning of negative lookahead predicates
654              which generate ASTs.
655
656       objectName si:void_notahead_exit
657              This method combines
658
659
660              i_loc_pop_rewind
661              i_status_negate
662
663
664              Parsers use it at the end of void negative lookahead predicates.
665
666       objectName si:value_notahead_exit
667              This method combines
668
669
670              i_ast_pop_discard/rewind
671              i_loc_pop_rewind
672              i_status_negate
673
674
675              Parsers use it at the end of negative lookahead predicates which
676              generate ASTs.
677
678       objectName si:kleene_abort
679              This method combines
680
681
682              i_loc_pop_rewind/discard
683              i:fail_return
684
685
686              Parsers  use  it  to  stop a positive repetition when its first,
687              required, expression fails.
688
689       objectName si:kleene_close
690              This method combines
691
692
693              i_error_pop_merge
694              i_loc_pop_rewind/discard
695              i:fail_status_ok
696              i:fail_return
697
698
699              Parsers use it at the end of repetitions.
700
701       objectName si:voidvoid_branch
702              This method combines
703
704
705              i_error_pop_merge
706              i:ok_loc_pop_discard
707              i:ok_return
708              i_loc_rewind
709              i_error_push
710
711
712              Parsers use it when transiting between branches of a choice when
713              both are void.
714
715       objectName si:voidvalue_branch
716              This method combines
717
718
719              i_error_pop_merge
720              i:ok_loc_pop_discard
721              i:ok_return
722              i_ast_push
723              i_loc_rewind
724              i_error_push
725
726
727              Parsers use it when transiting between branches of a choice when
728              the failing branch is void, and the next to  test  generates  an
729              AST.
730
731       objectName si:valuevoid_branch
732              This method combines
733
734
735              i_error_pop_merge
736              i_ast_pop_rewind/discard
737              i:ok_loc_pop_discard
738              i:ok_return
739              i_loc_rewind
740              i_error_push
741
742
743              Parsers use it when transiting between branches of a choice when
744              the failing branch generates an AST, and the  next  to  test  is
745              void.
746
747       objectName si:valuevalue_branch
748              This method combines
749
750
751              i_error_pop_merge
752              i_ast_pop_discard
753              i:ok_loc_pop_discard
754              i:ok_return
755              i_ast_rewind
756              i_loc_rewind
757              i_error_push
758
759
760              Parsers use it when transiting between branches of a choice when
761              both generate ASTs.
762
763       objectName si:voidvoid_part
764              This method combines
765
766
767              i_error_pop_merge
768              i:fail_loc_pop_rewind
769              i:fail_return
770              i_error_push
771
772
773              Parsers use it when transiting between parts of a  sequence  and
774              both are void.
775
776       objectName si:voidvalue_part
777              This method combines
778
779
780              i_error_pop_merge
781              i:fail_loc_pop_rewind
782              i:fail_return
783              i_ast_push
784              i_error_push
785
786
787              Parsers  use  it when transiting between parts of a sequence and
788              the sucessfully matched part is void, and after  it  an  AST  is
789              generated.
790
791       objectName si:valuevalue_part
792              This method combines
793
794
795              i_error_pop_merge
796              i:fail_ast_pop_rewind
797              i:fail_loc_pop_rewind
798              i:fail_return
799              i_error_push
800
801
802              Parsers  use  it when transiting between parts of a sequence and
803              both parts generate ASTs.
804
805       objectName si:value_symbol_start symbol
806              This method combines
807
808
809              if/found? i_symbol_restore $symbol
810              i:found:ok_ast_value_push
811              i:found_return
812              i_loc_push
813              i_ast_push
814
815
816              Parsers use it at the beginning of a nonterminal symbol generat‐
817              ing  an  AST, whose right-hand side may have generated an AST as
818              well.
819
820       objectName si:value_void_symbol_start symbol
821              This method combines
822
823
824              if/found? i_symbol_restore $symbol
825              i:found:ok_ast_value_push
826              i:found_return
827              i_loc_push
828              i_ast_push
829
830
831              Parsers use it at the beginning of  a  void  nonterminal  symbol
832              whose right-hand side may generate an AST.
833
834       objectName si:void_symbol_start symbol
835              This method combines
836
837
838              if/found? i_symbol_restore $symbol
839              i:found_return
840              i_loc_push
841              i_ast_push
842
843
844              Parsers use it at the beginning of a nonterminal symbol generat‐
845              ing an AST whose right-hand side is void.
846
847       objectName si:void_void_symbol_start symbol
848              This method combines
849
850
851              if/found? i_symbol_restore $symbol
852              i:found_return
853              i_loc_push
854
855
856              Parsers use it at  the beginning of a  void  nonterminal  symbol
857              whose right-hand side is void as well.
858
859       objectName si:reduce_symbol_end symbol
860              This method combines
861
862
863              i_value_clear/reduce $symbol
864              i_symbol_save        $symbol
865              i_error_nonterminal  $symbol
866              i_ast_pop_rewind
867              i_loc_pop_discard
868              i:ok_ast_value_push
869
870
871              Parsers use it at the end of a non-terminal symbol generating an
872              AST using the AST generated by the right-hand side as child.
873
874       objectName si:void_leaf_symbol_end symbol
875              This method combines
876
877
878              i_value_clear/leaf  $symbol
879              i_symbol_save       $symbol
880              i_error_nonterminal $symbol
881              i_loc_pop_discard
882              i:ok_ast_value_push
883
884
885              Parsers use it at the end of a non-terminal symbol generating an
886              AST whose right-hand side is void.
887
888       objectName si:value_leaf_symbol_end symbol
889              This method combines
890
891
892              i_value_clear/leaf  $symbol
893              i_symbol_save       $symbol
894              i_error_nonterminal $symbol
895              i_loc_pop_discard
896              i_ast_pop_rewind
897              i:ok_ast_value_push
898
899
900              Parsers use it at the end of a non-terminal symbol generating an
901              AST discarding the AST generated by the right-hand side.
902
903       objectName si:value_clear_symbol_end symbol
904              This method combines
905
906
907              i_value_clear
908              i_symbol_save       $symbol
909              i_error_nonterminal $symbol
910              i_loc_pop_discard
911              i_ast_pop_rewind
912
913
914              Parsers use it at the end of a void  non-terminal  symbol,  dis‐
915              carding the AST generated by the right-hand side.
916
917       objectName si:void_clear_symbol_end symbol
918              This method combines
919
920
921              i_value_clear
922              i_symbol_save       $symbol
923              i_error_nonterminal $symbol
924              i_loc_pop_discard
925
926
927              Parsers  use  it at the end of a void non-terminal symbol with a
928              void right-hand side.
929
930       objectName si:next_char tok
931
932       objectName si:next_range toks toke
933
934       objectName si:next_alnum
935
936       objectName si:next_alpha
937
938       objectName si:next_ascii
939
940       objectName si:next_ddigit
941
942       objectName si:next_digit
943
944       objectName si:next_graph
945
946       objectName si:next_lower
947
948       objectName si:next_print
949
950       objectName si:next_punct
951
952       objectName si:next_space
953
954       objectName si:next_upper
955
956       objectName si:next_wordchar
957
958       objectName si:next_xdigit
959              These methods all combine
960
961
962              i_input_next $msg
963              i:fail_return
964
965
966              with the appropriate i_test_xxx instruction.  Parsers  use  them
967              for handling atomic expressions.
968

BUGS, IDEAS, FEEDBACK

970       This  document,  and the package it describes, will undoubtedly contain
971       bugs and other problems.  Please report such in the category pt of  the
972       Tcllib  Trackers  [http://core.tcl.tk/tcllib/reportlist].   Please also
973       report any ideas for enhancements  you  may  have  for  either  package
974       and/or documentation.
975
976       When proposing code changes, please provide unified diffs, i.e the out‐
977       put of diff -u.
978
979       Note further that  attachments  are  strongly  preferred  over  inlined
980       patches.  Attachments  can  be  made  by  going to the Edit form of the
981       ticket immediately after its creation, and  then  using  the  left-most
982       button in the secondary navigation bar.
983

KEYWORDS

985       EBNF,  LL(k),  PEG,  TDPL, context-free languages, expression, grammar,
986       matching, parser, parsing expression, parsing expression grammar,  push
987       down  automaton,  recursive descent, state, top-down parsing languages,
988       transducer
989

CATEGORY

991       Parsing and Grammars
992
994       Copyright (c) 2009 Andreas Kupries <andreas_kupries@users.sourceforge.net>
995
996
997
998
999tcllib                                1.1                           pt::rde(n)
Impressum